【发布时间】:2020-01-19 10:58:43
【问题描述】:
我在 R 中有以下数据框
my_df_test <- data.frame(V1 = c(1,2,1), V2 = c("A","B","A"), V3 = c("S1", "S1", "S2"), V4 = c("x","x","x"), V5 = c("y","y","y"), V6 = c("A", "B", "C"), V7 = c("D","E","F"))
my_df_test
V1 V2 V3 V4 V5 V6 V7
1 1 A S1 x y A D
2 2 B S1 x y B E
3 1 A S2 x y C F
现在我想检查 V1 和 V2 中的值组合是否在 df 中多次出现。在我的示例中,my_df 第 1 行和第 3 行具有相同的值“1 A”和“1 A”。如果发生这种情况,我想要以下输出:
> my_df_test
V1 V2 V3 V4 V5 V6_S1 V6_S2 V7_S1 V7_S2
1 1 A S1, S2 x y A C D F
2 2 B S1 x y B NA E NA
所以基本上有两件事发生了变化:
- V3 现在包含 df 中所有行的值,其中 V1 和 V2 中的值相同。它们用','分隔
- 新的 V6 和 V7 列包含这些列的原始值
其余列和值应保持不变。
当只有 1 个类似“V6”的列时,我的代码可以工作。但是,当有多个时,这将不再起作用。
my_df_test %>%
group_by(V1, V2) %>%
mutate(new = paste0("V6_", V3), V3 = toString(V3)) %>%
spread(new, V6)
所以我的问题是我的代码应该如何适应变异和传播多个列?
【问题讨论】: