【问题标题】:Replace character in a dataframe with another character用另一个字符替换数据框中的字符
【发布时间】:2020-08-05 20:34:31
【问题描述】:

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

【问题讨论】:

  • 它对我有用 请检查“CAT”是否有前导/滞后空间
  • 这也适用于我。您确定在复制/粘贴您共享的代码时出现错误吗?
  • @akrun - 有时我正在运行代码并且没有按应有的方式做事。这是因为我看到了您之前对问题的解决方案。那家伙很高兴,但是当我尝试自己运行它时,它没有用。我需要重新安装R吗? R 会损坏或过时吗?我最近一直在加载很多包,这会影响 R 吗?
  • 我在关闭会话时不保存会话。如果您将会话保存在全局环境中,它可能会污染环境

标签: r dataframe replace string-substitution


【解决方案1】:

这是众所周知的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

【讨论】:

  • 成功了。谢谢@dmi3kno。我记得这是一个让我过去无法使用 R 的问题。我会下载最新的R。
【解决方案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

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2013-06-26
    • 2012-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多