将lapply结果转换为r [duplicate]中的单个数据框

问题描述 投票:3回答:1

这个问题在这里已有答案:

我从R中的数据帧列表中提取特定行,并希望将这些行组合成新的数据帧。作为一个例子,我将使用虹膜数据:

data(iris)
a.iris <- split(iris, iris$Species) 
b.iris <- lapply(a.iris, function(x) with(x, x[3,]))

我希望lapply()的返回被排列成一个与原始数据帧结构相同的数据帧(例如,names(iris))。我一直在寻找plyr包,但找不到合适的代码来完成这项工作。任何帮助将不胜感激!

布赖恩

r plyr lapply
1个回答
4
投票

你可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.