r - "Stretching"R 中的表

标签 r datatable data-manipulation

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

相关文章:

通过数值变量对因子重新排序

javascript - 使用下拉菜单显示特定的数据表

javascript - 数据表 - oLanguage.sInfo 问题

javascript - 如何将数组 [] 转换为一系列 { key : value } paired objects?

python - 使用python将字符数组转换为整数

r - 列表列表(来自 API 调用)到 R 中的数据框

r - Group_by 表示 R 中的多列

r - 带重置的条件累加

r - 如何在 ggplot2 中使用 geom_ribbon 为 geom_hline 制作错误栏?

c# - 当列名包含 "-"类型的字符时,如何使用 Dataview 过滤数据