2016-11-12 65 views
-2

我其中我已經基於舊列- [R聯合列在一個數據幀與另一同時除去舊列

我創建主數據幀的子集的這些列的最初和執行的一些創建的新列的主數據幀轉換和現在希望將列合併回的過程中移除舊列

在主數據幀中的舊列稱爲rev_quest_7rev_quest_5幷包含7列,五列分別

我創建的新列來自前一列s被稱爲updated_7updated_5並且包含相同數量的列和數據

所有這四個數據幀都是數據幀。

mydf_calc <- mydf%>% 
    select(everything(), -rev_quest_7, -rev_quest_5) %>% 
    bind_cols(updated_7, updated_5) 

最後,我希望合併數據幀updated_7updated_5主框架rev_quest_7rev_quest_5從主數據幀創建稱爲mydf_calc新的數據幀。在這個問題上所有四個五個項目是數據幀

謝謝您的幫助,要做到這一點是使用select_以編程方式指定的列使用從數據幀rev_quest_7rev_quest_5列名刪除

+0

「rev_quest_7」和「rev_quest_5」數據幀還是隻是來自'mydf'的列名或數字的集合?你的問題似乎首先表明後者,然後是前者。 – aichao

+0

嗨@aichao所有四項都是數據框架。本質上,我拿了一個列的子集,做了一些工作,並創建了2個新的數據框。由原始子數據幀表示的主要數據集中的舊特徵現在是冗餘的。所以我基本上想要刪除原始數據框中存在的'mydf'中的列。我可以手動編寫代碼,但是在子數據框中有很多列,所以我希望能夠使用以前的工作來獲得優雅的解決方案 –

回答

1

的一種方式:

library(dplyr) 
mydf_calc <- mydf %>% select_(.dots=paste0("-",unique(c(colnames(rev_quest_7),colnames(rev_quest_5))))) %>% 
         bind_cols(update_7,update_5) 

我將用一個簡單的例子,其中rev_quest_7rev_quest_5只有從mydf2列說明,但應該沒有關係:

mydf <- data.frame(a=1:3,b=2:4,c=3:5,d=4:6,e=5:7) 
## a b c d e 
##1 1 2 3 4 5 
##2 2 3 4 5 6 
##3 3 4 5 6 7 
## rev_quest_7 extracts columns "a" and "c" 
rev_quest_7 <- mydf[,c(1,3)] 
## rev_quest_5 extracts columns "b" and "d" 
rev_quest_5 <- mydf[,c(2,4)] 
## update_7 and update_5 operates on rev_quest_7 and rev_quest_5, respectively 
update_7 <- 2 * rev_quest_7 
## a c 
##1 2 6 
##2 4 8 
##3 6 10 
update_5 <- 3 * rev_quest_5 
## b d 
##1 6 12 
##2 9 15 
##3 12 18 

mydf_calc <- mydf %>% select_(.dots=paste0("-",unique(c(colnames(rev_quest_7),colnames(rev_quest_5))))) %>% 
         bind_cols(update_7,update_5) 
## e a c b d 
##1 5 2 6 6 12 
##2 6 4 8 9 15 
##3 7 6 10 12 18 
+0

天哪,這很聰明。非常感謝 –

相關問題