选择特定列,其中列名位于r中的另一个df中

选择特定列,其中列名位于r中的另一个df中,r,dataframe,dplyr,tidyverse,R,Dataframe,Dplyr,Tidyverse,我在堆栈中找不到解决方案,因此我的问题是: 我有一个有342列的df。 我想创建一个只包含特定列的新df 要保留的列列表位于另一个df中,在3个标题为X、Y、Z的列中列出,用于3个新数据帧 这是我现在的代码: # Read the data: data <- data.table::fread("data_30_9.csv") # Import variable names # variable.names.full = openxlsx::read.xlsx(&q

我在堆栈中找不到解决方案,因此我的问题是:

我有一个有342列的df。 我想创建一个只包含特定列的新df 要保留的列列表位于另一个df中,在3个标题为X、Y、Z的列中列出,用于3个新数据帧 这是我现在的代码:

# Read the data:
data <- data.table::fread("data_30_9.csv")


# Import variable names #
variable.names.full = openxlsx::read.xlsx("variables2.xlsx")
Y.variable.names = na.omit(variable.names.full[1])
X.variable.names = na.omit(variable.names.full[2])
Z.variable.names = na.omit(variable.names.full[3])

# Make new DF with only specific columns:
X.Data = data %>% select(as.character(X.variable.names)) # This works as X has only 1 variable
Y.Data = data %>% select(as.character(Y.variable.names)) # This give an error: Error: 
#                                                        # Can't subset columns that don't exist.
帮忙

数据可在此处获得:

问题是Y.variable.names是一个data.frame,您不能使用它来子集另一个data.frame

您可以通过键入classY.variable.names进行检查

因此,问题的解决方案是将Y.variable.names子集:

对variable.names.full使用lappy并从数据中选择列


那么在最后你想得到3个数据帧吗?是的,有3个数据帧
Y.Data = data %>% select(Y.variable.names[,1])
list_data <- lapply(variable.names.full, function(x) 
                    data[, na.omit(x), drop = FALSE])