R-将一个data.frame格式化为另一个';合并';data.frame基于一列中的公共值,该值跨不同的列而定
我从一个由三列组成的数据框开始。 第#1列包含ID,指示某些人(第#2列)的体重(第#3列)以千克为单位测量时的3个不同时间段 所有人员都进行了不定期的测量,这意味着一些人员在一个时间段内被测量多次或仅测量一次,但不是在所有时间段内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
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
是它们的一个很好的实现——让生活变得更加轻松。值得花时间学习。“值得花时间学习”。乔兰的解决方案批准了你的建议。