我对R来说很新。我试图用;并将其作为值添加到新列中,直到遇到另一个值;。现在这个价值在前面;将是新专栏中的值。
谢谢你!
结果:
答案 0 :(得分:1)
我们根据;
的出现创建一个组,然后将'v1'的第一个元素作为新列
library(dplyr)
df1 %>%
group_by(grp = cumsum(grepl(";", v1))) %>%
mutate(new = as.numeric(sub(";", "", first(v1)))) %>%
filter(!grepl(";", v1)) %>%
ungroup %>%
select(-grp)
# A tibble: 9 x 2
# v1 new
# <chr> <dbl>
#1 12345 10
#2 67890 10
#3 11121314 10
#4 85642 10
#5 19654 10
#6 5642 11
#7 9987 11
#8 22365 11
#9 5589 13
df1 <- data.frame(v1 = c('10;', 12345, 67890, 11121314, 85642, 19654,
'11;', 5642, 9987, 22365, '13;', 5589), stringsAsFactors = FALSE)
答案 1 :(得分:1)
使用fill
tidyr
的另一个解决方案(使用@ akrun&#39;)
library(dplyr)
library(tidyr)
df1 %>%
mutate(v2 = if_else(grepl(';', v1), as.numeric(sub(';', '', v1)), NA_real_)) %>%
fill(v2) %>%
filter(!grepl(';', v1))
<强>结果:强>
v1 v2
1 12345 10
2 67890 10
3 11121314 10
4 85642 10
5 19654 10
6 5642 11
7 9987 11
8 22365 11
9 5589 13