R语言 如何从数据框列表中提取特定列

64jmpszr  于 2023-03-10  发布在  其他
关注(0)|答案(4)|浏览(406)

我有一个数据框列表“l”。这些数据框本身是二维矩阵。对于我的工作,我需要创建另一个列表,其中的数据框是原始列表中数据框的子集。
例如:列表l1有两个数据框D1和D2,分别有10列和12列不同的数据,现在我想创建一个新的列表l2,它也有两个数据框,但这些数据框是从先前的数据框D1和D2中挑选出来的列,请考虑到同一列在D1和D2中的位置可能不同。因此我必须通过列名而不是索引来访问它
有人能建议我如何去实现这一点吗?

0aydgbwb

0aydgbwb1#

这里有一个例子(这是你应该在你的问题中加入的东西。如果你能用一个清晰的、可复制/粘贴的、可重复的例子来组织你的问题,你会得到几乎即时的帮助。)

问题:

# 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)。它将在列表中返回结果。

chhkpiq4

chhkpiq42#

你可以使用dplyr,它很好用,语法也很清楚:

library(dplyr)
    l <- list(mtcars, mtcars) # the list of 2 df
    new_list <- lapply(l, function(x) x%>% select(mpg,wt,am))

再见!

sr4lhrrt

sr4lhrrt3#

我有一个21列的列表,我想从中提取并创建一个单独的列表,列从1到7、11和21。

mydata <- read.csv("data.csv")
newdatalist <- data[c(1:7, 11, 21)]
kb5ga3dv

kb5ga3dv4#

purrr解决方案:

library(purrr)
library(dplyr)
map(l, ~ .x |> select(all_of(my_names)))

相关问题