Присвоение data.frame вызывает нежелательное изменение типа в R - PullRequest
2 голосов
/ 29 августа 2011

Скажем, я сгенерировал некоторые данные примерно так:

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

Ответы [ 2 ]

0 голосов
/ 29 августа 2011
dat[is.finite(dat$z),"col"] <- cut(dat$z[is.finite(dat$z)],6)

Должно работать.Я не знаю, почему назначение через $ не делает.

0 голосов
/ 29 августа 2011

Я не совсем уверен, что мой ответ - то, что вам нужно, но если вам нужны метки вместо целых чисел, представляющих фактор, попробуйте 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...