R:如何替换data.frame的元素?

Joh*_*n 13 replace r dataframe

我正在尝试将包含"#N/A"的data.frame的元素替换为"NULL",并且我遇到了问题:

foo <- data.frame("day"= c(1, 3, 5, 7), "od" = c(0.1, "#N/A", 0.4, 0.8))

indices_of_NAs <- which(foo == "#N/A") 

replace(foo, indices_of_NAs, "NULL")
Run Code Online (Sandbox Code Playgroud)

[<-.data.frame(*tmp*,list,value ="NULL")出错:新列会在现有列之后留下空洞

我认为问题是我的索引将data.frame视为一个向量,但是替换函数以某种方式对它进行了不同的处理,但我不确定是什么问题?

mds*_*ner 19

NULL实际上意味着"没有",而不是"缺失",所以它不能取代实际值 - 因为缺少R使用NA.

您可以使用is.na的替换方法直接更新所选元素,这将使用逻辑结果.(对索引使用哪个只适用于is.na,直接使用[调用列表访问,这是导致错误的原因).

foo <- data.frame("day"= c(1, 3, 5, 7), "od" = c(0.1, "#N/A", 0.4, 0.8)) 
NAs <- foo == "#N/A"

## by replace method
is.na(foo)[NAs] <- TRUE

 ## or directly
 foo[NAs] <- NA
Run Code Online (Sandbox Code Playgroud)

但是,当您使用c()创建强制强制时,您已经在od列中处理字符串(默认情况下实际上是一个因子),并且您可能需要单独处理列.例如,任何数字列永远不会匹配字符串"#N/A".


小智 12

为什么不

x$col[is.na(x$col)]<-value
Run Code Online (Sandbox Code Playgroud)


您不必更改数据框