【问题标题】:call variables by name and column number in a data.frame在 data.frame 中按名称和列号调用变量
【发布时间】:2017-05-11 14:46:22
【问题描述】:

我有一个数据框,其中包含要重新排序的列。但是,在我的脚本的不同迭代中,总列数可能会发生变化。

>Fruit
Vendor A B C D E ... Apples Oranges
Otto   4 5 2 5 2 ... 3      4

Fruit2<-Fruit[c(32,33,2:5)]

因此,我不想手动调整代码(第 32 列和第 33 列发生变化),而是执行以下操作:

Fruit2<-Fruit[,c("Apples", "Oranges", 2:5)]

我尝试了几种语法,但无法让它做我想做的事。我知道,这是一个简单的语法问题,但我还没有找到解决方案。 这个想法是在编写新数据框时将变量名称与向量混合以引用列。我不想用变量名拼出整个向量,因为实际上它是 30 个变量。

【问题讨论】:

  • Fruit[,c("Apples", "Oranges", names(Fruit)[2:5])] 会工作

标签: r


【解决方案1】:

我不确定你的数据是如何存储在 R 中的,所以这是我使用的:

Fruit <- data.frame( "X1" = c("A",4),"X2" = c("B",5),"X3" = c("C",2),"X4"= 
c("D",5),"X5"= c("E",2),"X6" = c("Apples",3),"X7"= 
c("Oranges",4),row.names = c("Vendor","Otto"),stringsAsFactors = FALSE)

           X1 X2 X3 X4 X5     X6      X7
    Vendor  A  B  C  D  E Apples Oranges
    Otto    4  5  2  5  2      3       4

然后使用:

indexes <- which(Fruit[1,]%in%c("Apples","Oranges"))
Fruit2<- Fruit[,c(indexes,2:5)]

Fruit[1,] 引用 Vendor 行,并且 "%in%" 将逻辑向量返回给函数 "which"。然后 "which" 返回索引。

这给出了:

    > Fruit2
               X6      X7 X2 X3 X4 X5
    Vendor Apples Oranges  B  C  D  E
    Otto        3       4  5  2  5  2

确保您的数据没有被存储为因子,否则这将不起作用。或者您可以根据上面的评论将供应商行更改为列名。

【讨论】:

    【解决方案2】:

    我发现答案是使用 dplyr 包。 它非常强大。

    上述问题的解决方案是:

    Fruit2<-Fruit %>% select(Apples,Oranges,A:E)
    

    即使列的索引发生变化,这也允许动态选择列和列列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多