假设我有以下数据库
我希望创建一个数据框,其中
我期望得到的结果应该如下所示:
df
。df <- data.frame(ID= c("A", "B", "C"),
Var1 = c(234, 12, 345),
Var2 = c(4, 555, 325),
Var3 = c("45|221|2", "982", NA))
> df
ID Var1 Var2 Var3
1 A 234 4 45|221|2
2 B 12 555 982
3 C 345 325 <NA>
我希望创建一个数据框,其中
Var1
和Var2
与ID
中的元素结合起来,并与Var3
中的元素相结合。我期望得到的结果应该如下所示:
> outcome
ID VarA VarB
1 A 234 45
2 A 234 221
3 A 234 2
4 A 4 45
5 A 4 221
6 A 4 2
7 B 12 982
8 B 555 982
请注意:
Var3
中的元素由竖线|
分隔。- 因为对于那个
ID
,Var3
是NA
,所以ID == C
不在outcome
中。
原始数据包含数百万个 ID。
library(tidyverse); df %>% filter(ID != "C") %>% separate_rows(Var3, sep = "\\|") %>% gather(key, Var2, -ID, -Var3) %>% select(-key) %>% arrange(ID)
这个怎么样? - markusseparate_rows
是一个更合适的函数来解决这个问题,尽管str_split
和unnest
得到的结果是一样的。 - Mako212separate_rows
。 - markus