基于r中的一列拆分数据帧,列的宽度不固定
我有一个问题,它是SE上一个覆盖范围很广的问题的扩展。即: 我的数据有一个字符串格式的列,逗号分隔,但没有固定长度基于r中的一列拆分数据帧,列的宽度不固定,r,dataframe,reshape,tidyr,R,Dataframe,Reshape,Tidyr,我有一个问题,它是SE上一个覆盖范围很广的问题的扩展。即: 我的数据有一个字符串格式的列,逗号分隔,但没有固定长度 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 像separate或strs
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
像separate
或strsplit
这样的东西似乎本身不是解决方案。分离失败,警告各列的值太多(NB id 3的值多于id 1)
感谢使用
dplyr
和tidyr
软件包:
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
使用
dplyr
和tidyr
软件包:
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
您还可以使用
unest
:
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
您还可以使用
unest
:
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
您可以使用
tidyr::分隔行:
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
您可以使用tidyr::分隔行:
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
好极了谢谢@PsidomMagnitive!谢谢@Psidom