嵌套' ifelse'声明返回此错误:' mult参数只能是' first',' last'或者'所有'

时间:2017-08-09 23:51:05

标签: r nested data.table

SO / R的新手,所以提前感谢您对我的耐心。我试图在R中使用一个简单的if / else语句来创建一个列,并根据不同列的值填充三个类别的高/中/低。

我得到的错误是多个参数只能是“第一个”,“最后一个”#39;或者'所有'。我发现这个错误的文档很少,我知道我的问题可能很简单。

再次重申我对此非常陌生。预先感谢您的帮助。一种更有效的方法也是我非常愿意听到的。

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"]

1 个答案:

答案 0 :(得分:2)

这个问题与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")))
]

Re:一种更有效的方法,请参见?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