R:如何在向量上使用“if”-like-function但没有“ifelse”,因为如果没有它就什么都不做

时间:2014-12-09 01:50:57

标签: r if-statement vectorization conditional-statements

我尝试根据第三个变量的条件,使用另一个变量的值一次覆盖多个变量(一种日历中的几个月)。如果条件为假,则不会发生任何事情。

我认为If函数会有用,因为可以省略else而不是no,它对向量不起作用。

    DF1[,3:4] <- if (DF1$v7==5) {DFDF1$v5}  
the condition has length > 1 and only the first element will be used

另一方面,适合矢量是ifelse,但它告诉我

    DF1[,3:4] <- ifelse (DF1$v7==5, DF1$v5, )
"argument "no" is missing, with no default", 

那么我应该怎么做才能实现我的目标呢?

感谢任何建议,初学者和我一样感激不尽!

PS:变量就是例子。

编辑:我正在寻找一种方法,我可以在DF1 [,3:4]中解决应该被列号替换的变量,否则我将不得不输入到12个不同的变量名(在我原来的DF中)。

2 个答案:

答案 0 :(得分:4)

一列接一列。关于else条件,只需使用原始值

for (i in 3:4){
 DF[,i] <- ifelse(DF$v7 == 5, DF1$v5, DF[,i])
}

答案 1 :(得分:0)

我可以想到它可能有用的一种方式:

 DF1[DF1$v7==5,3:4] <-cbind( DF1$v5,DF1$v5 )[DF1$v7==5, ]

作业双方的项目数量应匹配。测试。当DF1 $ v5是一个因子但按预期执行时,它传递整数值。也可以这样做:

 DF1[DF1$v7==5,3:4] <- DF1[ , c('v5','v5')][DF1$v7==5, ]