我搜索过,但我找不到类似的问题,所以如果我错过了,我会道歉。 我的问题其实非常简单。我有两个列表,一个较大的列表和一个较小的列表。
较小的一个由大列表中的数据的平均值组成(十行有 已汇总形成小清单 - >它的大小只有较大的十分之一。我现在想要的只是在大列表中添加一个新列(这没有问题)并显示下一个平均值 到原始数据。我知道我会看到平均十次,但没关系。
我试图解决这个问题"使用简单的列表比较,例如, (相关平均值以及原始数据在第一列中具有相同的标识符):
Large_List$Average_column[ Large_List$identifier == Small_List$identifier ] <- Small_List$Average[ Large_List$identifier == Small_List$identifier ];
但由于某种原因,它不起作用。可能是因为目标矢量大于源矢量。我真的尝试了很多,而且似乎唯一有效的是循环结构。但这不是选择,因为我的列表太大了......我相信这个简单的问题必须有一个聪明的解决方案。
更新&amp;规格 谢谢你的建议。但似乎我需要更加具体。问题是,在大多数情况下,但并非在所有情况下,平均值是由十个连续数据点组成的。由于样品中的孔,可能会发生较少的使用。因此,遗憾的是,复制无法完成工作。
这是一个例子(1_Ident是分钟标识符,10_Ident是十分钟标识符):
Original_List:
1_Ident | 10_Ident|Minute_value|
July1-0| July1-0d| 1
July1-2| July1-0d| 1
(..)
July1-10| July1-0d| 1
July1-11| July1-1d| 1
July1-12| July1-1d| 2
July1-21| July1-21| 3
July1-31| July1-31| 2
结果Small_list:
10_Ident|Minute_average|
July1-0d| 1
July1-1d| 1.5
July1-2d| 3
July1-3d| 2
期望的结果: Large_List:
1_Ident |10_Ident|Minute_value|Minute_average|
July1-0| July1-0d| 1 1
July1-2| July1-0d| 1 1
(..)
July1-10| July1-0d| 1 1
July1-11| July1-1d| 1 1.5
July1-12| July1-1d| 2 1.5
July1-21| July1-21| 3 3
July1-31| July1-31| 2 2
我认为主要问题是Small_list $ Minute_average向量与Large_list $ Minute_value向量的大小不同。如上所述,可以逐行比较两个列表,进行循环,但表的大小是> 1M行,因此不会起作用。
我想要做的基本上是以下几点:
1)查看Large_List$10_Ident
并比较Small_List$10_Ident
2)值匹配时,将相应的Small_List$Minute_average
值转移到Large_List$Minute_average
谢谢!
答案 0 :(得分:1)
您可以使用match
或merge
来执行此操作,但为什么不只计算分组的平均值?
Large_List$Average_column <- ave(Large_List$col_to_be_avgd,
Large_List$group_var,
FUN=mean, na.rm=TRUE)
合并代码可能看起来像
merge( Large_List, Small_List[c('identifier', "Average"], by='identifier' , all.x=TRUE)