【问题标题】:Select specific columns, where the column names are in another df in r选择特定列,其中列名在另一个 df in r
【发布时间】:2020-10-22 06:56:49
【问题描述】:

我在堆栈中找不到解决方案,所以这是我的问题:

  • 我有一个包含 342 列的 df。
  • 我想创建一个只包含特定列的新 df
  • 要保留的列列表在另一个 df 中,列在标题为 X、Y、Z 的 3 列中,用于 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.

帮助?

数据可在此处获得:

  1. https://github.com/amirnakar/TammyA/blob/main/data_30_9.csv
  2. https://github.com/amirnakar/TammyA/blob/main/Variables2.xlsx

【问题讨论】:

  • 那么最后你想得到 3 个数据帧吗?
  • 是的,有 3 个数据框

标签: r dataframe dplyr tidyverse


【解决方案1】:

问题在于Y.variable.names 是一个data.frame,您不能使用它来对另一个data.frame 进行子集化。

您可以输入class(Y.variable.names)查看。

所以你的问题的解决方案是子集Y.variable.names

Y.Data = data %>% select(Y.variable.names[,1])

【讨论】:

    【解决方案2】:

    variable.names.full 上使用lapply 并从data 中选择列。

    list_data <- lapply(variable.names.full, function(x) 
                        data[, na.omit(x), drop = FALSE])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-03
      • 2022-10-14
      • 1970-01-01
      • 2015-05-02
      • 2013-01-02
      • 1970-01-01
      • 2016-07-30
      • 2017-04-12
      相关资源
      最近更新 更多