用另一个字符替换数据框中的字符
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
我想将数据框中的字符“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