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,我们想要组中的第二个元素,value组A中的第一个元素B,NA组C.结果将是:
#[1] 1 3 NA
Run Code Online (Sandbox Code Playgroud)
这是一个解决方案:mapply和split:
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"并将子集化函数"["应用于每对参数.