【问题标题】:Referencing a column in R dataframe引用 R 数据框中的列
【发布时间】:2012-08-17 09:44:51
【问题描述】:

我无法按名称引用数据框中的列。我的函数从提取不存在 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。我没有错误。 这是related question

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

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]),]
}

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

【问题讨论】:

    标签: r function reference dataframe


    【解决方案1】:

    这个怎么样:

    prepare <- function(x, attr1, attr2){
      x[!is.na(x[attr1]) & !is.na(x[attr2]),]
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      na.omit(mydata)
      

      【讨论】:

      • 我在第二行使用了子集函数,问题不在于 is.na() 而在于列引用。
      【解决方案3】:
      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 吗?

      【讨论】:

      • 我怀疑 OP 可能一直在尝试将函数调用为 prepare(mydf, "att1", "att2")。只是猜测!
      • 是的,我承认。但如果我不这样做,我会得到一个“找不到对象'att2'”。我希望传递的是名称,而不是列。
      • 作为旁注,如果我要传递属性的引用而不是属性的名称,是否有任何名称来获取函数内部的名称? plotHist
      猜你喜欢
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2021-12-14
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多