简单的功能来分类NA值

时间:2017-05-12 12:17:38

标签: r function

我试图找到一个似乎是一个简单问题但没有任何成功的答案。

我想创建一个函数,它可以针对不同的数据帧操作不同的变量。功能需要做的就是搜索价值"不知道"并用NA替换它。我会按如下方式手动执行此操作:

raw.df$S8[raw.df$S8 == "Don't know"] <- NA

作为学习R的练习我想通过函数来​​做这个,但是找不到引用函数输入的方法。

在这个示例代码中,我甚至无法创建一个向量,它是我想要重新编码的数据帧变量的副本 - 它以NULL形式出现。因此,在我知道如何执行此部分之前,我无法将值重新编码为NA。

> NADK <- function(df,x) {
+  DDD <<- df$x
+ }
> 
> NADK(raw.df, S8)
> DDD
NULL

我假设我不能使用命令df $ x并期望r知道这来自函数输入?

1 个答案:

答案 0 :(得分:2)

不是编写一个在"Don't know"中使用硬连线的函数,而是将其作为函数的参数似乎更灵活。类似的东西:

to.na <- function(df,x,na.string){
  df[x][df[x] == na.string] <- NA
  df
}

这将返回更改的数据帧。

例如,如果

df <- data.frame(Name = c("Larry", "Curly", "Moe"),BirthYear = c(1900, 1910, 1920), DeathYear = c("1950", "1960", "Not dead"))

因此df

   Name BirthYear DeathYear
1 Larry      1900      1950
2 Curly      1910      1960
3   Moe      1920  Not dead

然后:

> df <- to.na(df,"DeathYear","Not dead")
> df
   Name BirthYear DeathYear
1 Larry      1900      1950
2 Curly      1910      1960
3   Moe      1920      <NA>

如果您使用read.table(或read.csv等关联函数)从文件中读取数据框,那么您可以通过使用参数{{1}来避免此问题。 }。有关详细信息,请参阅na.strings