替换 R 中数据框中的值

Replacing values in a dataframe in R

如果我有如下示例数据...

col_1   col_2
1       <blank>
2        5
3        6
4        ?

我如何编写一个自定义函数,让我用其他值替换某些值。例如,像下面这样的 for 循环允许我替换“?” 0s。对以下方法有什么想法吗?

data_clean = function(data)
{ 
for (item in data)
{
for (i in item)
  {
  if (i == '?'){replace(i,'?',0)}
  else {do nothing}
  }
}
}

你不需要循环来做到这一点。 Gsub 将允许您替换值

df1$col_2<-gsub("\?", 0, df1$col_2) 

您可以使用 sapply 在所有列上执行此操作

sapply(df1, function(x) gsub("\?", 0, x))

如果要替换所有列中的 ?

 data_clean <- function(data){
   data[] <- lapply(data, function(x) replace(x, x=='?',0))
   data}
 data_clean(df1)
 #col_1   col_2
 #1     1 <blank>
 #2     2       5
 #3     3       6
 #4     4       0

或者

data_clean2 <- function(data){
      data[data=="?"] <- 0
      data}
data_clean2(df1)
#   col_1   col_2
#1     1 <blank>
#2     2       5
#3     3       6
#4     4       0

数据

df1 <-structure(list(col_1 = 1:4, col_2 = c("<blank>", "5", "6", "?"
)), .Names = c("col_1", "col_2"), class = "data.frame", 
row.names = c(NA, -4L))

按照@akrun 的例子,另一种选择是:

clean <- function(x) ifelse(x == "?", 0, x)
data.frame(apply(df1, 2, clean))