代码之家  ›  专栏  ›  技术社区  ›  Nicholas

R-使用带FOR循环的ASSIGN时如何删除NAs?

r
  •  0
  • Nicholas  · 技术社区  · 5 年前

    我有一些代码可以导入一个数据帧(keywordsDF),当使用FOR循环时,它(通过使用colnames)会根据其中的列数创建新变量:

    keywordsDF = read_excel("//Users//n//Desktop//Keywords.xlsx")
    
    keywordList = colnames(keywordsDF)
    
    for (i in seq_along(keywordList)) {
      assign(keywordList[i], keywordsDF[keywordList[i]])
    }
    

    一切正常。但是,由于列的长度不同,它会将NAs导入到数据中。


    consumption = keywordsDF$Consumption[!is.na(keywordsDF$Consumption)]


    但我不知道如何在FOR循环中完成(在这里我不知道列名)。一、 e.我把 !is.na ? 好像没什么对我有用。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Gregor Thomas    5 年前

    你可以用 keywordsDF[[keywordList[i]]] 任何你想去的地方 keywordsDF$Consumption ,所以

    # spaced to make the substitution line up
    consumption =          keywordsDF$Consumption      [!is.na( keywordsDF$Consumption       )]
    assign(keywordList[i], keywordsDF[[keywordList[i]]][!is.na( keywordsDF[[keywordList[i]]] )]
    

    assign 这样地。。。一份清单可能更好,比如 kw_no_na = lapply(keywordsDF[keywordList], na.omit) kw_no_na$consumption kw_no_na[["consumption"]] .

        2
  •  1
  •   Jrm_FRL    5 年前

    na.omit() ?

    for (i in seq_along(keywordList)) {
      assign(keywordList[i], na.omit(keywordsDF[keywordList[i]]))
    }