gpt4 book ai didi

R - tidyr - 变异并传播多列

转载 作者:行者123 更新时间:2023-12-02 03:09:38 26 4
gpt4 key购买 nike

我在 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)

所以我的问题是我的代码应该如何适应变异和传播多个列?

最佳答案

您可以使用最近 tidyr 1.0.0 release 中添加的新 pivot_wider(),而不是 spread()。 。它有一个 values_from 参数,允许您一次指定多个列:

library(dplyr)
library(tidyr)

my_df_test %>%
group_by(V1, V2) %>%
mutate(new = V3, V3 = toString(V3)) %>%
pivot_wider(
names_from = new,
values_from = c(V6, V7)
)
#> # A tibble: 2 x 9
#> # Groups: V1, V2 [4]
#> V1 V2 V3 V4 V5 V6_S1 V6_S2 V7_S1 V7_S2
#> <dbl> <fct> <chr> <fct> <fct> <fct> <fct> <fct> <fct>
#> 1 1 A S1, S2 x y A C D F
#> 2 2 B S1 x y B <NA> E <NA>

reprex package 于 2019-09-18 创建(v0.3.0)

关于R - tidyr - 变异并传播多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com