假设我生成一些数据,如下所示:
dat <- data.frame(x = rnorm(100), y = rnorm(100), z = rnorm(100))
dat[sample(nrow(dat), 5), 3] <- NaN
dat[sample(nrow(dat), 5), 3] <- Inf
现在,一些z值是Inf
或NaN
。
结果的前10行
cut(dat$z[is.finite(dat$z)],6)[1:10]
[1] (0.286,1.17] (0.286,1.17] (0.286,1.17] (0.286,1.17] (0.286,1.17]
[6] (0.286,1.17] (-1.48,-0.599] (-1.48,-0.599] (-0.599,0.286] (0.286,1.17]
6 Levels: (-2.37,-1.48] (-1.48,-0.599] (-0.599,0.286] ... (2.06,2.94]
但如果我尝试进行以下分配
dat$col[is.finite(dat$z)] <- cut(dat$z[is.finite(dat$z)],6)
我得到的是整数而不是标签:
> dat$col[1:10]
[1] 4 4 4 4 4 4 2 2 NA 3
如何将因子标签正确分配给行的子集?
谢谢!Uri
dat[is.finite(dat$z),"col"] <- cut(dat$z[is.finite(dat$z)],6)
应该有效。我不知道为什么通过$
分配没有。
我不完全确定我的答案是否是你想要的,但如果你想要标签而不是表示因子的整数,请尝试as.character
:
dat$col[is.finite(dat$z)] <- as.character(cut(dat$z[is.finite(dat$z)],6))
如果您希望它是一个因子而不是一个字符向量,请将其封装为对因子的调用:
dat$col[is.finite(dat$z)] <- factor(as.character(cut(dat$z[is.finite(dat$z)],6)))