This question already has answers here:
Convert a list of data frames into one data frame
(9个答案)
去年关闭。
我正在从R中的数据帧列表中提取特定的行,并希望将这些行组合成一个新的数据帧。例如,我将使用虹膜数据:
我希望将
布赖恩
或者,当然,您也可以使用
(9个答案)
去年关闭。
我正在从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