我想在数据框中将字符“ F”更改为“ X”。 请参见下面。
df <- data.frame(N=c(1,2,3,4,5,6),CAT=c('A','B','C','D','E','F'))
df
Result:
N CAT
1 1 A
2 2 B
3 3 C
4 4 D
5 5 E
6 6 F
我已经运行了这段代码,但没有用
df$CAT[df$CAT == 'F'] <- 'X'
Error in `$<-.data.frame`(`*tmp*`, code, value = character(0)) :
replacement has 0 rows, data has 6
此代码似乎可用于我通过csv导入的其他数据。有什么原因不能与我创建的此特定数据框一起使用吗?任何帮助表示赞赏。
答案 0 :(得分:3)
这是众所周知的stringsAsFactors=FALSE
。对于那些在R4.0之后阅读它的人来说,这不再是一个问题,但是在2020年之前的许多年中,用户一直在努力地想起data.frame
(和as.data.frame()
会自动将所有字符串强制转换为因子)。>
然后发生的是,您正在尝试将新级别引入到因素中,而这并不是R中需要这样做的方式。如果不是要创建因素,则只需修改数据框架创建代码即可。
df <- data.frame(N=c(1,2,3,4,5,6),
CAT=c('A','B','C','D','E','F'),
stringsAsFactors = FALSE)
但是,如果您想创建一个因子,可以按照以下方法修改级别并重新编码其中一个级别。
df <- data.frame(N=c(1,2,3,4,5,6),
CAT=c('A','B','C','D','E','F'),
stringsAsFactors = TRUE)
df
str(df)
#> 'data.frame': 6 obs. of 2 variables:
#> $ N : num 1 2 3 4 5 6
#> $ CAT: Factor w/ 6 levels "A","B","C","D",..: 1 2 3 4 5 6
levels(df$CAT)[levels(df$CAT)=="F"] <- "X"
df
#> N CAT
#> 1 1 A
#> 2 2 B
#> 3 3 C
#> 4 4 D
#> 5 5 E
#> 6 6 X
答案 1 :(得分:2)
您可以使用dplyr中的重新编码功能
df <- data.frame(N=c(1,2,3,4,5,6),CAT=c('A','B','C','D','E','F'))
df <- df %>%
mutate(CAT = recode(CAT, 'F'= 'X'))
df