【发布时间】: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列中的值来自哪里 -
好的。我现在明白你想要的输出是什么了。但它有错误,这让我完全困惑