我有一个类似以下的数据框(但有几千行):
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,只使用第一个元素”。甚至以某种方式设法删除了一次列。
我可以用它做什么?如果我可以避免使用循环,我不想使用循环,因为迭代将永远需要
答案 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)