对data.frame的赋值导致R中发生不必要的类型更改



假设我生成一些数据,如下所示:

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值是InfNaN

结果的前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)))

最新更新