2014-03-07 37 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