鉴于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 5df - 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,
# 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))
索引向量(可能带NA):
inds <- c(2,1,NA)
我们如何得到每组列值的第n个元素,最好是在基数R?
例如,基于inds,我们想要组A中的第二个元素值,组B中的第一个元素,组C中的NA.因此结果将是:
#[1] 1 3 NA这是一个mapply和split的解决方案:
mapply("[", with(df, split(value, group)), inds)
它返回一个命名向量
A B C 1 3 NA
with(df,split(value,group))按组拆分数据帧并返回数据帧列表. mapply接受该列表和“inds”并将子集化函数“[”应用于每对参数.