R-将一个data.frame格式化为另一个';合并';data.frame基于一列中的公共值,该值跨不同的列而定

R-将一个data.frame格式化为另一个';合并';data.frame基于一列中的公共值,该值跨不同的列而定,r,R,我从一个由三列组成的数据框开始。 第#1列包含ID,指示某些人(第#2列)的体重(第#3列)以千克为单位测量时的3个不同时间段 所有人员都进行了不定期的测量,这意味着一些人员在一个时间段内被测量多次或仅测量一次,但不是在所有时间段内 id person_name person_weight 1 Carol 51 1 Mike 76 1 Mike 81

我从一个由三列组成的数据框开始。 第#1列包含ID,指示某些人(第#2列)的体重(第#3列)以千克为单位测量时的3个不同时间段

所有人员都进行了不定期的测量,这意味着一些人员在一个时间段内被测量多次或仅测量一次,但不是在所有时间段内

   id       person_name person_weight
    1          Carol         51
    1          Mike          76
    1          Mike          81
    1          Dave          66
    1          Carol         59
    2          James         78
    2          Simone        55
    2          Simone        49
    2          David         85
    3          Mike          93
    3          Dave          110
    3          Dave          98 
实际上,这里的全部只是一个简单的例子。。因此,如果这种数据收集毫无意义,就不要麻烦了

现在,我想计算一段时间内每个人的平均体重,然后 最终得到一个组合数据帧,如下所示:

group_id    Carol   Mike    Dave    James   Simone  David
   1         55     78.5     66      NA       NA     NA
   2         NA      NA      NA      78       52     85
   3         NA      93      104     NA       NA     NA
我尝试了一些基本的R函数(table、apply等),但无法处理跨列的依赖性


提前感谢您的帮助,让我更接近第二个/组合的数据帧

似乎是一个简单的
dcast

library(reshape2)
dcast(dat,id ~person_name,
      fun.aggregate = mean,
      value.var = "person_weight",fill = NA_real_)
  id Carol Dave David James Mike Simone
1  1    55   66    NA    NA 78.5     NA
2  2    NA   NA    85    78   NA     52
3  3    NA  104    NA    NA 93.0     NA

似乎是一个简单的dcast:

library(reshape2)
dcast(dat,id ~person_name,
      fun.aggregate = mean,
      value.var = "person_weight",fill = NA_real_)
  id Carol Dave David James Mike Simone
1  1    55   66    NA    NA 78.5     NA
2  2    NA   NA    85    78   NA     52
3  3    NA  104    NA    NA 93.0     NA

我认为一些词汇在这里会很有用。您的第一个数据集,其中每个测量都是一个单独的记录,称为
long
格式化数据。有两种对应的
wide
格式:一种是每组一行(您想要的),另一种是每个人一行。在长格式和宽格式之间切换通常称为
重塑
;我们
宽数据融合为长数据,并
长数据转换为宽数据。这些都是强大的概念,
reforme2
是它们的一个很好的实现——让生活变得更加轻松。值得花时间学习。“值得花时间学习”。Joran的解决方案认可了你的建议。我认为一些词汇在这里会很有帮助。您的第一个数据集,其中每个测量都是一个单独的记录,称为
long
格式化数据。有两种对应的
wide
格式:一种是每组一行(您想要的),另一种是每个人一行。在长格式和宽格式之间切换通常称为
重塑
;我们
宽数据融合为长数据,并
长数据转换为宽数据。这些都是强大的概念,
reforme2
是它们的一个很好的实现——让生活变得更加轻松。值得花时间学习。“值得花时间学习”。乔兰的解决方案批准了你的建议。