【问题标题】:gather() per grouped variables in R for specific columns特定列的 R 中每个分组变量的gather()
【发布时间】:2019-10-19 02:28:24
【问题描述】:

我有一个很长的数据框,其中包含分组工作的玩家的决策。 我需要以这样一种方式转换数据,使每一行(个人观察)都包含所有组成员的决定(所以我们基本上可以看到它们是否相互依赖)。

假设生成代码是:

group_id <- c(rep(1, 3), rep(2, 3))
player_id <- c(rep(seq(1, 3), 2))
player_decision <- seq(10,60,10)
player_contribution <- seq(6,1,-1)
df <-
  data.frame(group_id, player_id, player_decision, player_contribution)

所以初始数据如下:

  group_id player_id player_decision player_contribution
1        1         1              10                   6
2        1         2              20                   5
3        1         3              30                   4
4        2         1              40                   3
5        2         2              50                   2
6        2         3              60                   1

但我需要为每个组将其转换为wide,但仅限于其中一些变量,(在此示例中专门针对player_contribution,但以保留其余数据的方式。所以转换后的数据的头是:

data.frame(group_id=c(1,1), 
           player_id=c(1,2),
           player_decision=c(10,20),
           player_1_contribution=c(6,6),
           player_2_contribution=c(5,5),
           player_3_contribution=c(4,6)
           )
  group_id player_id player_decision player_1_contribution player_2_contribution player_3_contribution
1        1         1              10                     6                     5                     4
2        1         2              20                     6                     5                     6

我怀疑我需要在dplyr 中输入group_by,然后以某种方式在每个组中输入gather,但仅适用于player_contribution(或变量向量)。但我真的不知道如何处理它。欢迎任何提示!

【问题讨论】:

  • tidyr::pivot_wider()
  • 我不明白player_3_contribution 列中的值来自哪里
  • 好的。我现在明白你想要的输出是什么了。但它有错误,这让我完全困惑

标签: r dplyr tidyr


【解决方案1】:

这是使用 tidyr 和 dplyr 的解决方案。
制作一个包含玩家贡献列的数据框。然后将此数据帧连接回原始数据帧中感兴趣的列。

library(tidyr)
library(dplyr)
wide<-pivot_wider(df, id_cols= - player_decision, 
       names_from = player_id, 
       values_from = player_contribution, 
       names_prefix = "player_contribution_")

answer<-left_join(df[, c("group_id",  "player_id", "player_decision") ], wide)

answer

  group_id player_id player_decision player_contribution_1 player_contribution_2 player_contribution_3
1        1         1              10                     6                     5                     4
2        1         2              20                     6                     5                     4
3        1         3              30                     6                     5                     4
4        2         1              40                     3                     2                     1
5        2         2              50                     3                     2                     1
6        2         3              60                     3                     2                     1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多