我在 R 中有以下数据:
name = c("person1", "person2", "person3", "person1", "person2", "person3")
var1 = c(1,3,5,6,7,3)
var2 = c(1,1,1,1,1,1)
var3 = rnorm(6,5,6)
var4 = rnorm(6,1,6)
iteration_round = c(1,1,1,2,2,2)
frame = data.frame(name, var1, var2, var3, var4, iteration_round)
name var1 var2 var3 var4 iteration_round
1 person1 1 1 21.931815 0.4904012 1
2 person2 3 1 -2.261360 -2.3358434 1
3 person3 5 1 5.493085 5.7269291 1
4 person1 6 1 -5.039148 -9.4483417 2
5 person2 7 1 -3.662336 5.8499795 2
6 person3 3 1 5.297230 -2.8756166 2
我正在尝试将数据格式化为如下所示,以便列看起来像这样(“iteration_round”列现在只有唯一值 1,2,3,..):
person1_var1 person1_var2 person1_var3 person1_var4 person2_var1 person2_var2, person2_var3, person2_var4 person3_var1 person3_var2, person3_var3, person3_var4 iteration_round
它应该看起来像这样(我只是为示例填充了随机数,但 iteration_round 列是正确的):
person1_var1 person1_var2 person1_var3 person1_var4 person2_var1 person2_var2 person2_var3 person2_var4 person3_var1 person3_var2 person3_var3 person3_var4 iteration_round
1 15 4 5 5 5 5 5 6 4 5 11 6 1
2 5 2 6 6 7 8 9 9 1 0 2 6 2
我尝试使用 data.table 库来做到这一点
library(data.table)
my_table = dcast(setDT(frame), var1 + var2 + var3 + var4 ~ iteration_round , value.var = 'name')
但这并没有给出预期的结果:
var1 var2 var3 var4 1 2
1: 1 1 21.931815 0.4904012 person1 <NA>
2: 3 1 -2.261360 -2.3358434 person2 <NA>
3: 3 1 5.297230 -2.8756166 <NA> person3
4: 5 1 5.493085 5.7269291 person3 <NA>
5: 6 1 -5.039148 -9.4483417 <NA> person1
6: 7 1 -3.662336 5.8499795 <NA> person2
有人可以告诉我如何解决这个问题吗?
谢谢
最佳答案
dcast
可以在 value.var
中获取多个列。使用“iteration_round”和“name”创建公式
dcast(setDT(frame), iteration_round ~ name,
value.var = c('var1', 'var2', 'var3', 'var4'))
关于r - "Stretching"R 中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69509065/