我在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新手。谢谢
答案 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"