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

Ama*_*eur 0 r

我想R到以下:如果LocID等于3,4,7,8,14那么数据$ newConc等于数据$ conc/2 else数据$ newConc < - data $ conc#else保持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 ...
Run Code Online (Sandbox Code Playgroud)

警告:条件长度> 1且仅使用第一个元素

mat*_*fee 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
Run Code Online (Sandbox Code Playgroud)

为此,您可以使用ifelse.

另外,如果你想测试一个值等于OT 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 )
Run Code Online (Sandbox Code Playgroud)

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