根据r中另一列的间隔剪切一列

时间:2017-08-10 04:33:07

标签: r dataframe cut levels

我想将测试$收入削减到25个级别,并使用派生的间隔,我将它们存储在一个名为levels的变量中,我希望根据相同的间隔减少火车$收入。我在下面尝试了下面的代码,但我不确定为什么我的一些火车收入价值被强制转为NA。

出了什么问题?有一个更好的方法吗?谢谢!

ApplicationPoolIdentity -> NetworkService

1 个答案:

答案 0 :(得分:1)

正如@JohnGilfillan所说,一个原因可能是你的train$income高于5.68或低于-0.853。在这种情况下,您将获得一些值作为NA,而其他值将是数字。这是一种可能的情况,但另一个原因(对于另一个实例)可能是您使用了字符向量来指定实际代码中的中断(来自levels对象的cut将返回一个字符向量) 。在这种情况下,您将获得仅包含NA的向量(写为<NA>)。

解决方案是扩展levels向量的极端值。

试试这个:

set.seed(1)
a <- runif(100, -6, 6)

set.seed(2)
b <- runif(100, -6, 6)

levs <- levels(cut(a, 25))
levs <- gsub("\\(", "", levs)
levs <- gsub("\\]", "", levs)
levs <- c(as.numeric(sapply(strsplit(levs, ","), "[", 1)),
 as.numeric(sapply(strsplit(levs, ","), "[", 2))[length(levs)])

cut.b <- cut(b, levs)

## Both NA values are outside levs
b[is.na(cut.b)]

cut.b.new <- cut(b, c(-6, levs[c(-1, -length(levs))], 6))

## No NAs
any(is.na(cut.b.new))

PS:不建议将函数名称用作对象名称。因此levs代替levels