【问题标题】:Using a list or vector as input for a select statement使用列表或向量作为 select 语句的输入
【发布时间】:2018-08-13 09:32:22
【问题描述】:

我有两个数据框。原文df1

  Country Ccode Year Happiness Power
1  France    FR 2000      1872  1213
2  France    FR 2001      2345  1234
3      UK    UK 2000      2234  1726
4      UK    UK 2001      9082  6433

df1vars,它只包含几个列名的向量:

1 Country
2 Year
3 Happiness

我想从df1 中的df1vars 的列中进行选择。当我违背自己更好的判断尝试执行以下操作时:

library(dplyr)
df2 <- select(df1, df1vars)

获取输出:

  Country  Year Happiness 
1  France  2000      1872  
2  France  2001      2345  
3      UK  2000      2234  
4      UK  2001      9082  

我收到了消息:

Error: ``ES1varselect`` must evaluate to column positions or names, not a list

对于 select 语句的这方面是否有有效的解决方法?

【问题讨论】:

  • df1vars 是向量还是数据框?
  • 嗯,它是一个数据框,但只有一列。
  • 那你需要指定列名。尝试select(df1, df1vars$V1) 假设V1 是列名。
  • 然后我得到错误:Error: ES1varselect$ES1varselect` 必须计算为列位置或名称,而不是整数向量`
  • @TomKisters df1vars$V1factor,需要转换成字符。 select(df1, as.character(df1vars$V1))

标签: r select vector dplyr


【解决方案1】:

如果两者都是data.frame 那么

df1[,c(df1vars$Colname)]

其中df1 是您在问题中提到的data.framedf1vars 是另一个data.frame,具有以下内容:

    Colname
1   Country
2      Year
3 Happiness

最终输出:

  Country Year Ccode
1  France 2000    FR
2  France 2001    FR
3      UK 2000    UK
4      UK 2001    UK

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2013-02-20
    • 1970-01-01
    相关资源
    最近更新 更多