我有一个数据框列表“l”。这些数据框本身就是二维矩阵。对于我的工作,我需要创建另一个列表,其中的数据帧是原始列表中数据帧的子集。
例如:列表l1有两个数据帧D1和D2,分别有10和12个不同的数据列。现在我想创建一个新列表 l2,它也有两个数据框,但这些数据框是从早期数据框 D1 和 D2 中挑选出来的列。请考虑 D1 和 D2 中同一列的位置可能不同,因此我必须通过列名而不是索引来访问它
有人可以建议我如何实施这个吗?
这是一个示例(这是您应该在问题中放入的内容。如果您可以使用像这样的清晰、可复制/粘贴、可重现的示例来构建您的问题,您将获得近乎即时的帮助。)
Problem:
# list of data frames:
l = list(mtcars, mtcars)
# vector of column names I would like to extract
my_names = c("mpg", "wt", "am")
# these columns might be at different positions in the data frames
解决方案:
result = lapply(l, "[", , my_names)
# look at the top 6 rows of each to verify that it worked:
lapply(result, head)
# [[1]]
# mpg wt am
# Mazda RX4 21.0 2.620 1
# Mazda RX4 Wag 21.0 2.875 1
# Datsun 710 22.8 2.320 1
# Hornet 4 Drive 21.4 3.215 0
# Hornet Sportabout 18.7 3.440 0
# Valiant 18.1 3.460 0
#
# [[2]]
# mpg wt am
# Mazda RX4 21.0 2.620 1
# Mazda RX4 Wag 21.0 2.875 1
# Datsun 710 22.8 2.320 1
# Hornet 4 Drive 21.4 3.215 0
# Hornet Sportabout 18.7 3.440 0
# Valiant 18.1 3.460 0
解释:你本质上想做l[[1]][, my_names]
, l[[2]][, my_names]
, ... lapply
将函数应用于每个列表元素。在这种情况下,函数是[
,这需要rows作为它的第一个参数(我们将其留空以指示所有行),columns作为它的第二个参数(我们给它my_names
)。它以列表形式返回结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)