用另一个字符替换数据框中的字符

Replace character in a dataframe with another character

我想将数据框中的字符“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 导入的其他数据。为什么它不适用于我创建的这个特定数据框?非常感谢任何帮助。

您可以使用 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

就是俗话说的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