簡體   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