【问题标题】:How to select a subset of a dataframe using a variable dynamically如何使用变量动态选择数据框的子集
【发布时间】:2019-05-06 21:27:29
【问题描述】:

我有一个包含 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) 的输出: “功能”、“代词”、“ppron”、“i”、“我们”、“你”、“shehe”、“他们”、“ipron”、“文章”、“动词”、“辅助动词”、“过去” ", "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 列

如何做到这一点?

【问题讨论】:

  • 带有提取[函数的简单子集:orig_df[vector_of_column_names]
  • Srikrishna Krishnarao,到目前为止,所有 cmets 和答案都在说两件事:(1)只需使用 [,使用列名的向量,就像你说的那样,ala @987654327 @; (2) 我认为您最好花一两分钟时间阅读?Extract 以及一些关于在 R 中索引矩阵和框架的好教程,因为它看起来好像是一个简单的应用程序。如果我们完全错了,您需要以其他方式说服我们,因为它看起来就是这样。祝你好运!
  • 我已经发布了我尝试过的所有表格。确实它看起来很简单,但是,我不知道为什么没有收到所需的输出。

标签: r dataframe subset pca


【解决方案1】:

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

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

【讨论】:

  • 您可以使用基本 R 实现相同的结果,而无需加载整个 tidyverse 环境:subset(mtcars, select = c(am, cyl))
  • 试试t.df[ , c1] 顺便说一句,你的第二行可以写成X &lt;- t.df[ , 3:307] 不需要1:nrow(t.df)。您可能会发现使用 [ , ] 学习数据帧的基本索引很有用。
  • 我编辑了我的问题以显示我的列变量列表。我不需要调用 c("col1", "col3"),而是需要在适当的位置传递一个变量,例如 c(x),并且 x 是从上一步获得的,如上所示
猜你喜欢
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2015-03-22
  • 2020-04-27
相关资源
最近更新 更多