繁体   English   中英

通过data.frame中的名称和列号调用变量

[英]call variables by name and column number in a data.frame

我有一个要重新排序的列的数据框。 但是,在脚本的不同迭代中,列的总数可能会更改。

>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个变量。

我不确定您的数据如何存储在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,]引用供应商行,而“%in%”将逻辑向量返回给函数“哪个”。 然后“哪个”返回索引。

这给出:

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

确保您的数据没有作为因素存储,否则将无法正常工作。 或者,您可以根据上面的注释将“供应商”行更改为列名。

答案是,正如我发现的那样,使用dplyr软件包。 它非常强大。

解决上述问题的方法是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM