【发布时间】: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)
GT VB WM
23 34 28
34 27 33
44 46
54
我在 csv 文件中有一个类似上面的数据。当将参数作为变量名传递时,我需要一个 R 脚本通过循环或函数按列值检索。例如。当我输入 GT 时,我应该得到没有 NA 的相关值,例如
GT
23 34
【问题讨论】:
na.omit(df$GT)
这个
lapply(df, na.omit)
创建一个向量列表,其中所有NAs 都被删除。
【讨论】:
根据您提供的所有信息,以下 R 命令(“R 脚本”)将为您执行此操作。我假设 CSV 文件的第一行包含 3 列 GT、VB 和 WM,并且从第 2 行开始有 4 行数据。我还假设该文件实际上是逗号分隔的文件格式,表示列(包括标题行)用逗号分隔。
df <- read.csv("myfile.csv")
如果您不希望在输入列名时出现 NA 值,则必须从数据框的每个元素中删除 NA,将结果保存为列表(因为数据框不能列长度不等),使用lapply 或sapply。
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)
【讨论】: