SO/R的新手,所以提前感谢您对我的耐心等待。我正在尝试让一个简单的 if/else 语句在 R 中工作,该语句创建一个列并根据不同列的值填充高/中/低三个类别。
我得到的错误是"多参数只能是'第一个'、'最后一个'或'全部'。我发现关于此错误的文档非常少,而且我知道我的问题可能很简单。
再次重申,我对此很陌生。提前感谢您的帮助。一种更有效的方法也是我非常愿意听到的。
zips3[, PW_Data := ifelse(pctr08zip_updated > 0.4 & pctr08zip_updated <=0.5), "Poop",
ifelse(pctr08zip_updated > 0.5 & pctr08zip_updated <=0.6), "Poop2",
ifelse(pctr08zip_updated > 0.6 & pctr08zip_updated <=0.7), "South", "Exclude"]
这个问题与ifelse无关,而与未正确匹配您的(和(有关,这意味着您将额外的参数传递给您的data.table。语法ifelse(condition, trueresult, falseresult)
像ifelse(1:3 < 3, TRUE, FALSE)
,而不是像你那样ifelse(1:3 < 3), TRUE, FALSE)
,根本无法正常工作。例如,匹配您的括号使其正常工作:
library(data.table)
zips3 <- data.table(pctr08zip_updated=seq(0L,10L,1L)/10)
zips3[,
PW_Data :=
ifelse(pctr08zip_updated > 0.4 & pctr08zip_updated <=0.5, "Poop",
ifelse(pctr08zip_updated > 0.5 & pctr08zip_updated <=0.6, "Poop2",
ifelse(pctr08zip_updated > 0.6 & pctr08zip_updated <=0.7, "South",
"Exclude")))
]
回复:一种更有效的方法,请参阅?cut
它将向量切成由一系列切割点定义的段,并返回一个因子变量,可以适当地标记。
labs <- c("Exclude","Poop","Poop2","South","Exclude")
zips3[, PW_Data_cut := labs[cut(pctr08zip_updated, c(-Inf,0.4,0.5,0.6,0.7,Inf))] ]
我在这里单独指定标签,因为您的高值和低值的输出重复超出范围。它给出相同的结果:
identical(zips3$PW_Data, zips3$PW_Data_cut)
#[1] TRUE