基于r中的一列拆分数据帧,使用非固定宽度列

时间:2017-05-23 02:41:46

标签: r dataframe reshape tidyr

我有一个问题,这是SE上一个包含良好问题的扩展。即:

Split a column of a data frame to multiple columns

我的数据有一个字符串格式的列,以逗号分隔,但没有固定的长度。

data = data.frame(id = c(1,2,3), treatments = c("1,2,3", "2,3", "8,9,1,2,4"))

所以我想让我的数据框最终处于适当的整齐/长形式:

id    treatments
1     1
1     2
1     3
...
3     1
3     2
3     4

separatestrsplit这样的东西似乎并没有成为解决方案。单独失败并显示警告:各列的值太多(NB id 3的值大于id 1)。

由于

3 个答案:

答案 0 :(得分:2)

您可以使用tidyr::separate_rows

library(tidyr)
separate_rows(data, treatments)

#   id treatments
#1   1          1
#2   1          2
#3   1          3
#4   2          2
#5   2          3
#6   3          8
#7   3          9
#8   3          1
#9   3          2
#10  3          4

答案 1 :(得分:0)

使用dplyrtidyr个包:

data  %>% 
  separate(treatments, paste0("v", 1:5)) %>% 
  gather(var, treatments, -id) %>% 
  na.exclude %>% 
  select(id, treatments) %>%
  arrange(id)


   id treatments
1   1          1
2   1          2
3   1          3
4   2          2
5   2          3
6   3          8
7   3          9
8   3          1
9   3          2
10  3          4

答案 2 :(得分:0)

您还可以使用unnest

library(tidyverse)
data %>% 
  mutate(treatments = stringr::str_split(treatments, ",")) %>% 
  unnest()

   id treatments
1   1          1
2   1          2
3   1          3
4   2          2
5   2          3
6   3          8
7   3          9
8   3          1
9   3          2
10  3          4