【问题标题】:R function/loop to get column wise valuesR函数/循环以获取逐列值
【发布时间】:2020-02-20 12:31:38
【问题描述】:
GT  VB  WM
23  34  28
34  27  33
    44  46
    54

我在 csv 文件中有一个类似上面的数据。当将参数作为变量名传递时,我需要一个 R 脚本通过循环或函数按列值检索。例如。当我输入 GT 时,我应该得到没有 NA 的相关值,例如

GT
23 34 

【问题讨论】:

  • 使用na.omit(df$GT)

标签: r list loops get element


【解决方案1】:

这个

lapply(df, na.omit)

创建一个向量列表,其中所有NAs 都被删除。

【讨论】:

    【解决方案2】:

    根据您提供的所有信息,以下 R 命令(“R 脚本”)将为您执行此操作。我假设 CSV 文件的第一行包含 3 列 GT、VB 和 WM,并且从第 2 行开始有 4 行数据。我还假设该文件实际上是逗号分隔的文件格式,表示列(包括标题行)用逗号分隔。

    df <- read.csv("myfile.csv")
    

    如果您不希望在输入列名时出现 NA 值,则必须从数据框的每个元素中删除 NA,将结果保存为列表(因为数据框不能列长度​​不等),使用lapplysapply

    df.list <- sapply(df, FUN=function(x) x[!is.na(x)])
    

    然后附加到它:

    attach(df.list)
    

    键入列的名称应返回省略 NA 的原始值。

    GT  
    [1] 23 34
    
    VB
    [1] 34 27 44 54
    
    WM
    [1] 28 33 46
    

    完成后,从这个修改后的 R 对象中分离出来,这样做是一种很好的做法。

    detach(df.list) # Good practice
    

    这正是你所说的。不多也不少。

    数据

    library(tibble)
    df <- tribble(~GT,  ~VB,  ~WM,
    23,  34,  28,
    34,  27,  33,
    NA,  44,  46,
    NA,  54,  NA)
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 2015-10-19
      • 2015-10-12
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多