这个问题在这里已有答案:
我从R中的数据帧列表中提取特定行,并希望将这些行组合成新的数据帧。作为一个例子,我将使用虹膜数据:
data(iris)
a.iris <- split(iris, iris$Species)
b.iris <- lapply(a.iris, function(x) with(x, x[3,]))
我希望lapply()
的返回被排列成一个与原始数据帧结构相同的数据帧(例如,names(iris)
)。我一直在寻找plyr包,但找不到合适的代码来完成这项工作。任何帮助将不胜感激!
布赖恩
你可以使用do.call()
和rbind()
并简化你的lapply()
通话。
a.iris <- split(iris, iris$Species)
b.iris <- do.call(rbind, lapply(a.iris, `[`, 3, ))
b.iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## setosa 4.7 3.2 1.3 0.2 setosa
## versicolor 6.9 3.1 4.9 1.5 versicolor
## virginica 7.1 3.0 5.9 2.1 virginica
> all.equal(names(iris), names(b.iris))
## [1] TRUE
或者当然,您也可以使用tapply()
查找每组的第三行。
iris[tapply(seq_len(nrow(iris)), iris$Species, `[`, 3), ]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 3 4.7 3.2 1.3 0.2 setosa
# 53 6.9 3.1 4.9 1.5 versicolor
# 103 7.1 3.0 5.9 2.1 virginica