在R中分组后选择聚合列的第n个值

989*_*989 4 group-by aggregate r dataframe

给出df如下:

  # group value
# 1     A     8
# 2     A     1
# 3     A     7
# 4     B     3
# 5     B     2
# 6     B     6
# 7     C     4
# 8     C     5

df <- structure(list(group = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L), .Label = c("A", "B", "C"), class = "factor"), value = c(8L, 
1L, 7L, 3L, 2L, 6L, 4L, 5L)), .Names = c("group", "value"), class = "data.frame", row.names = c(NA, 
-8L))
Run Code Online (Sandbox Code Playgroud)

和索引的矢量(可能与NA):

inds <- c(2,1,NA)
Run Code Online (Sandbox Code Playgroud)

我们如何得到value每组列的第n个元素,最好是在基数R

例如,基于inds,我们想要组中的第二个元素,valueA中的第一个元素B,NAC.结果将是:

#[1] 1 3 NA
Run Code Online (Sandbox Code Playgroud)

lmo*_*lmo 5

这是一个解决方案:mapplysplit:

mapply("[", with(df, split(value, group)), inds)
Run Code Online (Sandbox Code Playgroud)

它返回一个命名向量

 A  B  C 
 1  3 NA
Run Code Online (Sandbox Code Playgroud)

with(df, split(value, group))按组拆分数据并返回数据帧列表.mapply获取该列表和"inds"并将子集化函数"["应用于每对参数.

  • 最初使用"["似乎很尴尬,但它通常可以避免构造通用函数,这可能会增加解释的难易程度. (2认同)