我有如下所示的data.frame
ID age legend location
1 83 country;province;city X;A;J
2 15 country;city X;K
3 2 country;province;city Y;B;I
4 12 country;city X;L
5 2 country;city Y;J
6 2 country;province;city Y;A;M
7 18 country;province;city X;B;J
8 85 country;province;city X;A;I
要描述它:第三列(图例)带有对第四列(位置)值的描述。图例列的行中记录的顺序指示位置列中的值的顺序。
因此,我需要获得如下的data.frame
ID age country province city
1 83 X A J
2 15 X <NA> K
3 2 Y B I
4 12 X <NA> L
5 2 Y <NA> J
6 2 Y A M
7 18 X B J
8 85 X A I
为进行描述,我需要从图例列中提取信息,并将其设置为新列的名称,然后从位置列中填充适当的信息。我不能只将列分开;因为每行中记录的数量不同。有什么建议吗?
答案 0 :(得分:2)
使用最后在“注释”中可重复显示的DF
,先使用separate_rows
,然后spread
将数据从长到宽传输。如果列的顺序无关紧要,则可以省略select
行。
library(dplyr)
library(tidyr)
DF %>%
separate_rows(legend, location) %>%
spread(legend, location) %>%
select(ID, age, country, province, city) # optional
给予:
ID age country province city
1 1 83 X A J
2 2 15 X <NA> K
3 3 2 Y B I
4 4 12 X <NA> L
5 5 2 Y <NA> J
6 6 2 Y A M
7 7 18 X B J
8 8 85 X A I
Lines <- "
ID age legend location
1 83 country;province;city X;A;J
2 15 country;city X;K
3 2 country;province;city Y;B;I
4 12 country;city X;L
5 2 country;city Y;J
6 2 country;province;city Y;A;M
7 18 country;province;city X;B;J
8 85 country;province;city X;A;I"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)