2014-03-07 41 views
0

我中的R的數據幀看起來像這樣:移動數據幀的某些元件到新的列(在R)

jiz <- data.frame(Type=c("X","B","B","B","B","X","B"), 
        Action=c("both","1","2","2","1","both","1")) 

類型是X或B,和行動決定什麼類型的動作(無論是動作1或2)應該在Type中的變量上進行。如果類型爲「X」,則始終採取兩種操作,如果類型爲「B」,則採取操作1 操作2。

現在我們添加兩列:

jiz[c("1","2")]<-NA 

現在,我想「X」進入新列,因爲兩者採取了行動,和「B」進入的任何一個新列 - 這取決於是採取什麼行動,例如現有的R代碼將使這個新的數據幀:

jiz.new <- data.frame(Type=c("X","B","B","B","B","X","B"), 
         Action=c("both","1","2","2","1","both","1"), 
         "1"=c("X","B",0,0,"B","X","B"), 
         "2"=c("X",0,"B","B",0,"X",0)) 

注意,如果「B」的行動2 - B投入新列「2」 - 在「1」欄中填入0。

回答

1

這裏有一個辦法:

transform(jiz, "1" = ifelse(Action != "2", as.character(Type), "0"), 
       "2" = ifelse(Action != "1", as.character(Type), "0")) 

    Type Action X1 X2 
1 X both X X 
2 B  1 B 0 
3 B  2 0 B 
4 B  2 0 B 
5 B  1 B 0 
6 X both X X 
7 B  1 B 0 
+0

非常感謝:)乾淨,漂亮 – Erosennin