假设我生成了一些类似的数据:
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
答案 0 :(得分:0)
我不完全确定我的答案是你想要的,但是如果你想要标签而不是代表因子的整数,请试试as.character
:
dat$col[is.finite(dat$z)] <- as.character(cut(dat$z[is.finite(dat$z)],6))
如果你想让它成为一个因子而不是一个字符向量,请将其包含在对factor:
的调用中dat$col[is.finite(dat$z)] <- factor(as.character(cut(dat$z[is.finite(dat$z)],6)))
答案 1 :(得分:0)
dat[is.finite(dat$z),"col"] <- cut(dat$z[is.finite(dat$z)],6)
应该有效。我不知道为什么通过$
进行分配却没有。