我有一个包含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是集合名称。
答案 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
,所以只需将其替换为