如何动态使用变量选择数据框的子集

时间:2019-05-06 21:27:30

标签: r dataframe subset pca

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

请参见下面的代码。

NAME                                    READY     STATUS    RESTARTS   AGE
coredns-6fdd4f6856-6bl64                0/1       Pending   0          1h
coredns-6fdd4f6856-xgrbm                0/1       Pending   0          1h
kubernetes-dashboard-65c76f6c97-c69jg   0/1       Pending   0          13m

print(c2)的输出: “功能”,“代词”,“ ppron”,“ i”,“我们”,“您”,“ shehe”,“ they”,“ ipron”,“ article”,“ verb”,“ auxverb”,“ past” “,”现在“,”未来“,”副词“,” conj“,最多110个变量

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)

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

[1] 45498 [1] 0

[1] 45498 [1] 0

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

该怎么做?

1 个答案:

答案 0 :(得分:0)

这是一种实现方法,带有示例数据框:

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命令。