我想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,只使用第一个元素
答案 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)), ... )
。