R:两个列表之间的数据传输(源列表小于目标列表)

时间:2014-08-20 17:07:32

标签: r list

我搜索过,但我找不到类似的问题,所以如果我错过了,我会道歉。 我的问题其实非常简单。我有两个列表,一个较大的列表和一个较小的列表。

较小的一个由大列表中的数据的平均值组成(十行有 已汇总形成小清单 - >它的大小只有较大的十分之一。我现在想要的只是在大列表中添加一个新列(这没有问题)并显示下一个平均值 到原始数据。我知道我会看到平均十次,但没关系。

我试图解决这个问题"使用简单的列表比较,例如, (相关平均值以及原始数据在第一列中具有相同的标识符):

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 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用matchmerge来执行此操作,但为什么不只计算分组的平均值?

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)