对data.frame的赋值会导致R中不需要的类型更改

时间:2011-08-29 14:48:12

标签: r dataframe

假设我生成了一些类似的数据:

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

2 个答案:

答案 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)

应该有效。我不知道为什么通过$进行分配却没有。