使用取决于其他两列的元素创建data.frame列(在R中)

时间:2014-03-14 08:32:26

标签: r dataframe calculated-columns

之前,我问过这个问题: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在这里对我不起作用,因为我有两个以上的组合进入/创建相同的新列。

1 个答案:

答案 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的新列,其中包含相应的值。