使用R中的因子

时间:2015-02-02 18:19:32

标签: r replace dataframe

我在R中有一个因子的数据框。我需要用字符串替换一个值,应该很简单,但我一直得到一个我不明白的错误。继承看data.frame的样子......

'data.frame':   13 obs. of  4 variables:
 $ Date...Time: Factor w/ 6 levels "9/25 8:25 ET",..: 1 2 2 2 2 2 2 2 3 4 ...
 $ Favorite   : Factor w/ 13 levels "At Baltimore",..: 8 11 10 2 3 1 4 5 6 7 ...
 $ Spread     : Factor w/ 7 levels "-1.5","-12","-2",..: 4 5 3 4 7 4 1 7 2 5 ...
 $ Underdog   : Factor w/ 13 levels "At Chicago","At Dallas",..: 8 NA 1 4 12 5 6 11 7 10 ...

我正在尝试使用此代码操作此data.frame中的一个值..

dat[2,4] = "String" 

但是当我这样做时,我收到此错误消息

    Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "String") :
  invalid factor level, NA generated

生成'NA',如何用字符串替换'NA'值?请帮助我R新手。谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用levels功能更改因子的级别。例如,假设你有data.frame

dat <- data.frame(
  x=rep(letters[1:3],2),
  y=rep(LETTERS[1:3],2),
  stringsAsFactors=TRUE)
##
R> dat
  x y
1 a A
2 b B
3 c C
4 a A
5 b B
6 c C

并且您想要从dat[2,2]"string"更改为"B"。如果您只想更改 此特定观察(而不是变量"B"中出现的所有y),您可以添加一个级别,然后重新分配:

levels(dat[,2]) <- c(levels(dat[,2]),"string")
dat[2,2] <- "string"
##
R> dat
  x      y
1 a      A
2 b string
3 c      C
4 a      A
5 b      B
6 c      C

如果您想将<{>>所有次出现的"B"更改为"string",您只需

levels(dat[,2])[which(levels(dat[,2])=="B")] <- "string"
R> dat
  x      y
1 a      A
2 b string
3 c      C
4 a      A
5 b string
6 c      C

答案 1 :(得分:0)

数据框的所有列都属于factor类。如果您希望将列Underdog视为character列,则可以使用

对其进行转换
dat$Underdog <- as.character(dat$Underdog)

然后你可以改变值:

dat[2, "Underdog"] <- "String"