[英]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.