R中语法错误中的简单if else语句

时间:2012-03-13 04:50:07

标签: r

我想R到以下内容: 如果LocID等于3,4,7,8,14,则数据$ newConc等于数据$ conc / 2 else data $ newConc< - data $ conc#else keep conc相同

data$newConc <- if(data$LocID == c(3,4,7,8,14))
data$conc/2 else data$conc

str(data)
 $ LocID     : int  1 2 3 4 5 6 7 8 9 10 ...
 $ time      : int  1 1 1 1 1 1 1 1 1 1 ...
$ conc      : num  0.03695 0.0155 0.00738 0.00753 0.01795 ...

警告:   条件的长度> 1,只使用第一个元素

1 个答案:

答案 0 :(得分:5)

据我所知,你的代码(由于缺少结束括号而无法运行?)你正试图做(伪代码):

foreach row in data
    if row$LocID is one of 3, 4, 7, 8, or 14
    THEN set row$newConc to row$conc/2
    ELSE set row$newConc to row$conc

要执行此操作,请使用ifelse

另外,如果你想测试一个值是否等于3,4,7,8或14,那么不要使用== - 那将返回向量布尔值,if需要布尔值,因此你的错误。

使用data$locID %in% c(3,4,7,8,14)返回 TRUE / FALSE,或使用any(data$locID == c(3,4,7,8,14))将布尔值向量转换为单个布尔值:

您将标量与矢量进行比较,因此您的输出是矢量。 if语句只接受一个布尔值(不是布尔值的向量)。

使用data$locID %in% c(3,4,7,8,14)返回 TRUE / FALSE,或使用any(data$locID == c(3,4,7,8,14))将布尔值向量转换为单个布尔值:

data$newConc <- ifelse( data$locID %in% c(3,4,7,8,14),
                        data$conc/2,
                        data$conc )

或者我可以使用ifelse( any(data$locID == c(3,4,7,8,14)), ... )