R列拆分

时间:2018-06-07 13:22:12

标签: r

我对R来说很新。我试图用;并将其作为值添加到新列中,直到遇到另一个值;。现在这个价值在前面;将是新专栏中的值。

谢谢你!

enter image description here

结果:

enter image description here

2 个答案:

答案 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