如何用 R 数据框中的字符串替换数值?

数据挖掘 r 数据框
2022-02-24 04:05:15

我想用字符串值替换数据框中列中的所有数值。以下似乎不起作用。

df <- within(df, myCol[is.numeric(myCol)] <- 'NOTMISSING')

尽管 df 有一些值为 NA,而另一些值为数字,但所有值都被替换为 NOTMISSING。

也试过

df <- within(df, myCol[is_numeric(myCol)] <- 'NOTMISSING')

任何指针高度赞赏。

2个回答

从以下文档is.numeric

is.numeric 的默认方法返回 TRUE,如果其参数是模式“numeric”(类型 > “double”或类型“integer”)而不是因子,否则返回 FALSE。

所以对于一个向量,is.numeric返回一个单一的TRUE,它不会像你期望的那样测试每个元素。

is.numeric(c(5, 4, 3))
[1] TRUE

is.numeric(c(5, 4, NA))
[1] TRUE

这就是为什么所有或没有值都更改为 NOTMISSING 的原因。

@eg-r 的修复是正确的。这是完成相同任务的一种tidyverse方法。

> df<-tibble(myCol=c(5, 4, NA))
> df
# A tibble: 3 x 1
  myCol
  <dbl>
1     5
2     4
3    NA
> df %>% mutate(myCol = ifelse(is.na(myCol), myCol, "NOTMISSING"))
# A tibble: 3 x 1
       myCol
       <chr>
1 NOTMISSING
2 NOTMISSING
3       <NA>

NA 可以是数字(特别是如果该列中的其他值都是数字)。试试这个 :

df$myCol = ifelse(is.numeric(df$myCol) & !is.na(df$myCol), "NOTMISSING", df$myCol)

或者,如果您只想将该列中所有非 NA 值作为该字符串,您可以将原始代码更改为:

df <- within(df, myCol[!is.na(myCol)] <- 'NOTMISSING')