首页 > 解决方案 > 如何使用变量动态选择数据框的子集

问题描述

我有一个包含 300 列的 R 数据框。我已经完成了主成分分析并抓住了解释数据集可变性的前 110 列。我们如何将 110 个列名列表传递给 R 函数以选择仅包含这些列的原始数据框的子集?

请看下面的代码。

t.df = read.xlsx('t_dataset.xlsx', 1,startRow=1 )
X=t.df[ , 3:307]
t.pca=PCA(X, graph=FALSE)
write.infile(t.pca$var$contrib, "pca.csv", sep=',')

t.df.pca = read.xlsx('pca1.xlsx', 1,startRow=1 )
t.df.pca.r=subset(t.df.pca, Dim.1>mean(Dim.1) | Dim.2>mean(Dim.2) | Dim.3>mean(Dim.3) | Dim.4>mean(Dim.4) | Dim.5>mean(Dim.5))

c1=c(t.df.pca.r$Column)

#c1 contains the list of 110 column names.

c2=cat(paste(shQuote(c1), collapse=", "))
print(c2)

print(c2) 的输出:“funct”、“pronoun”、“ppron”、“i”、“we”、“you”、“shehe”、“they”、“ipron”、“article”、“verb” , "auxverb", "past", "present", "future", "adverb", "conj", 最多 110 个变量

t.df.2=t.df[c(c2)]
nrow(t.df.2)
ncol(t.df.2)

t.df.4=t.df[c2]
nrow(t.df.4)
ncol(t.df.4)

t.df.5=t.df[ ,c2]
nrow(t.df.5)
ncol(t.df.5)

以上代码返回结果如下: [1] 45498 [1] 0

[1] 45498 [1] 0

[1] 45498 [1] 0

我需要的是:将这些列名传递给 R 函数并获取原始数据帧 t.df 的子集。此子集将仅包含 c1 中存在的 110 列

这个怎么做?

标签: rdataframesubsetpca

解决方案


这是一种方法,使用示例数据框:

library(tidyverse)

df <-
  tibble(
    col1 = c(1, 2, 3),
    col2 = c(2, 3, 4),
    col3 = c(3, 4, 5)
  )

cols_to_keep <- c("col1", "col3")

df %>% 
  select(cols_to_keep)

我不知道你的数据是什么格式,但只要你得到一个列名向量,你应该能够使用该select命令。


推荐阅读