我想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且仅使用第一个元素
据我所知,你的代码(由于缺少结束括号而无法运行?)你正试图做(伪代码):
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)), ... ).