基于布尔值从其他列复制值

时间:2015-10-18 03:47:54

标签: r dataframe calculated-columns

我有一个类似以下的数据框(但有几千行):

 x   a   b    c
[1]  1   2  True
[2]  4   7  False
[3]  5   3  False
[4]  9   6  True

我需要一个函数来根据c复制a和b的值(如果为真,则为b,如果为假,则为b)。所以它应该成为

 x   a   b   c
[1]  1   2   1
[2]  4   7   7
[3]  5   3   3
[4]  9   6   9

我尝试过使用lapply,没有用。 试图

x$c <- if (x$c) x$a else x$b

也没用。他们吐出错误,例如“条件长度> 1,只使用第一个元素”。甚至以某种方式设法删除了一次列。

我可以用它做什么?如果我可以避免使用循环,我不想使用循环,因为迭代将永远需要

2 个答案:

答案 0 :(得分:3)

我们可以使用快速的行/列索引

 x$c <- x[cbind(1:nrow(x),(x$c=='False')+1)]

答案 1 :(得分:1)

你可以这样做,

x$c <- ifelse(x$c=="True" ,x$a , x$b)