R:两个列表之间的数据传输(源列表小于目标列表)
我搜索了一下,但找不到类似的问题,所以如果我错过了,我道歉。 我的问题其实很简单。我有两个清单,一个大的和一个小的 较小的一个由大列表中数据的平均值组成(有十行) 已聚合形成小列表->其大小为大列表的十分之一)。现在我只想在大列表中添加一个新列(这没问题),然后显示平均值 恢复到原始数据。我知道我会看到平均值十次,但那很好 我试图通过简单的列表比较来解决这个“问题”,例如(相关的平均值以及原始数据在第一列中具有相同的标识符): 生成的小列表:R:两个列表之间的数据传输(源列表小于目标列表),r,list,R,List,我搜索了一下,但找不到类似的问题,所以如果我错过了,我道歉。 我的问题其实很简单。我有两个清单,一个大的和一个小的 较小的一个由大列表中数据的平均值组成(有十行) 已聚合形成小列表->其大小为大列表的十分之一)。现在我只想在大列表中添加一个新列(这没问题),然后显示平均值 恢复到原始数据。我知道我会看到平均值十次,但那很好 我试图通过简单的列表比较来解决这个“问题”,例如(相关的平均值以及原始数据在第一列中具有相同的标识符): 生成的小列表: 10_Ident|Minute_average| J
10_Ident|Minute_average|
July1-0d| 1
July1-1d| 1.5
July1-2d| 3
July1-3d| 2
预期结果:
大列表:
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
我认为主要的问题是小列表$Minute\u平均向量与大列表$Minute\u值向量的大小不同。如前所述,可以通过循环逐行比较两个列表,但表的大小大于1M行,因此这不起作用
我想做的基本上是:
1) 查看大列表$10_Ident
并比较小列表$10_Ident
2) 如果值匹配,将相应的
小列表$Minute\u average
值转移到大列表$Minute\u average
谢谢 您可以使用
match
或merge
来实现这一点,但为什么不直接计算分组的平均值呢
Large_List$Average_column <- ave(Large_List$col_to_be_avgd,
Large_List$group_var,
FUN=mean, na.rm=TRUE)
欢迎加入!请提供一份报告。查找
?match
、%in%
和/或?rep
。只要它始终是10个连续元素的平均值,那么创建向量平均值怎么样谢谢你的建议!完美,完美,完美,正是我所需要的!
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
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)