r - 如何使用变量动态选择数据框的子集
问题描述
我有一个包含 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 列
这个怎么做?
解决方案
这是一种方法,使用示例数据框:
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
命令。
推荐阅读
- python - 如何有效地将转换映射到 pandas DataFrame
- javascript - 由于类型错误,批量写入 Firebase Cloud Firestore 失败
- java - 在硒测试中寻找新元素
- python - 使用 Python Selenium 在网页上找到单击的图标并在另一个网页上单击类似的图标
- mongodb - 远程数据库中的 insertOne 时缓冲超时
- php - 警告:尝试访问 bool 类型值的数组偏移量
- gpu - Tensorflow 2.3.1 mutliGPU NaN 损失值
- sql - 如何从 Redshift 中的特定日期减去 n 天?
- jekyll - Jekyll .md 到 html
- linux - 包 gpg 签名失败