1

我无法按名称引用数据框中的列。我的函数从提取不存在 NA 的行开始:

prepare <- function(dataframe, attr1,attr2){
subset_na_still_there <- dataframe[!is.na(attr1) & !is.na(attr2),]
subset_na_still_there2 <- subset(dataframe, !is.na(attr1) & !is.na(attr2))
### someother code goes here
}

但是,返回的子集仍然包含 NA。我没有错误。这是一个相关的问题

编辑:选择列,然后按数字引用它们就可以了:

prepare <- function(dataframe, attr1,attr2){
subset_cols <- dataframe[,c(attr1, attr2)]
subset_gone <- subset_cols[!is.na(subset_cols[,1]) & !is.na(subset_cols[,2]),]
}

为什么第一个版本不能按预期工作?

4

3 回答 3

3

这个怎么样:

prepare <- function(x, attr1, attr2){
  x[!is.na(x[attr1]) & !is.na(x[attr2]),]
}
于 2012-08-17T10:26:09.903 回答
1
df <- data.frame(att1=c(1,NA,NA,10),att2=c(NA,1,2,3),val=c("a","z","e","r"))

df
  att1 att2 val
1    1   NA   a
2   NA    1   z
3   NA    2   e
4   10    3   r

test <- function(df,att1,att2){
df_no_na <- df[!is.na(att1) & !is.na(att2),]
df_no_na
}

test(df,df$att1,df$att2)
  att1 att2 val
4   10    3   r

这对我有用。你确定NA的?是is.na(df$att1)回报TRUE吗?

于 2012-08-17T09:57:31.080 回答
1

与其创建自己的函数,不如尝试subset

subset(mydata, !is.na(attr1) & !is.na(attr2))

如果您想删除任何字段中带有 NA 的行,请尝试

na.omit(mydata)
于 2012-08-17T09:49:30.377 回答