对列向量元素的操作

时间:2015-03-12 15:21:54

标签: r

我有一个包含1的列向量。我还有另一个包含数字的数字列。

示例:

day_eq   day
1         1
1         5
1         3
1         2

我现在想说: 如果day中的元素小于day_eq中的相应元素, make invalid(列向量元素)= 5.

这是我的代码:

for (i in 1:nrow(setin)){
        if (setin[[i,"day"]]<setin[[i,"day_eq"]]){
            setin[[i,"valid"]] = 0
            setin[[i,"invalid_code"]] = 5 
        }
        }

它不起作用。它一直在说:

Error in if (setin[[i, "day"]] < setin[[i, "day_eq"]]) { : 
  missing value where TRUE/FALSE needed

In if (test.ID1$day_eq > test.ID1$day) { :
  the condition has length > 1 and only the first element will be used

test.ID1是集合名称。

2 个答案:

答案 0 :(得分:0)

你不需要循环。我不确定你到底在做什么......但是ifelse应该可以帮助你...

setin$valid <- ifelse(setin$day < setin$day_eq, 0, NA)
setin$invalid_code <- ifelse(setin$day < setin$day_eq, 5, NA)

答案 1 :(得分:0)

您的数据

day_eq <- c(1,1,1,1)
day <- c (1,5,3,2)
setin <- data.frame(day_eq,day)

使用dplyr的解决方案是

library(dplyr)
setin %>% mutate(invalid  = ifelse (day < day_eq, 5, 0))

我使用setin作为设置名称,但是,您也使用test.ID1,所以只需将其替换为