之前,我问过这个问题:Moving certain elements of data frame into new columns (in R)
现在,我有相同的数据框:
> jiz <- data.frame(Type=c("X","B","B","B","B","X","B"),
+ Action=c("both","1","2","2","1","both","1"))
> jiz
Type Action
1 X both
2 B 1
3 B 2
4 B 2
5 B 1
6 X both
7 B 1
我想构建一个新列,称为“Result”,其中包含三个值“X”,“Y”和“Z”,具体取决于“Type”和“Column”两列中的值行动”。
如果Type为'X'且Action为'both' - &gt; “结果”是X
如果Type为'B'且Action为'1' - > gt; “结果”是Y
如果Type为'B'且Action为'2' - > “结果”是Z,
使新数据框成为:
> jiz.new
Type Action Result
1 X both X
2 B 1 Y
3 B 2 Z
4 B 2 Z
5 B 1 Y
6 X both X
7 B 1 Y
我在上面链接的帖子中的transform + ifelse在这里对我不起作用,因为我有两个以上的组合进入/创建相同的新列。
答案 0 :(得分:1)
首先,定义一个函数:
conditionalResult <- function(argtype, argaction){
if (argtype=="X" & argaction=="both")
return("X")
if (argtype=="B" & argaction==1)
return("Y")
if (argtype=="B" & argaction==2)
return("Z")
在函数定义之后将数据转换为data.table:
install.packages("data.table")
require("data.table")
jiz <- as.data.table(jiz)
并创建一个新的条件列:
jiz[, c("Result"):=conditionalResult(Type, Action)]
Voila,现在您在data.table中有一个名为Result的新列,其中包含相应的值。