写入列表r函数来迭代数据帧列

时间:2017-06-27 18:27:42

标签: r

我是R的新手,我正在努力改进编写尽可能高效/漂亮的代码。

我的任务是: 检查"年龄"的缺失值和"姓名"数据集train.csv。

的属性

我想在单独的列表元素中为每列生成缺失值的索引。我编写了以下代码来执行此操作。

list(which(is.na(train$Age)))
list(which(is.na(train$Name)))

我的直觉告诉我,如果你很多人都在编写同一行代码的几次迭代,那么你可能不太了解这种语言(任何反对意见?)。我能够使用" apply"来压缩上面的内容,但是这个函数在所有列上运行,而不仅仅是在两个感兴趣的列上运行。

apply(train, 2, function(x) which(is.na(x)))

或者,我可以用这两列创建一个新的数据框,但这完全违背了这个问题的目的......

非常感谢任何提示!

2 个答案:

答案 0 :(得分:0)

要仅对感兴趣的列运行您的应用,您可以更改

apply(train[,c("Age", "Name")], 2, function(x) which(is.na(x)))

train[,c("Age", "Name")]

额外说明:train从<{1}}开始所有行(,之前没有),只列“年龄”和“姓名”(要在,之后保留的列列表

答案 1 :(得分:0)

要创建一个函数,您可以使用您的语句并修改如下:

train <- data.frame(Age = c(NA,"x100",NA), Name = c("b","c",NA))

my.is.na <- function(data.colname){
  apply(train[names(train) == data.colname], 2, function(x) which(is.na(x)))
}

然后,您可以通过数据集的变量名称调用该函数。

> my.is.na("Name")
Name 
   3 
> my.is.na("Age")
     Age
[1,]   1
[2,]   3

数据:

> train
   Age Name
1 <NA>    b
2 x100    c
3 <NA> <NA>