【问题标题】:Convert list of dataframes to list of numeric vectors in R将数据帧列表转换为 R 中的数值向量列表
【发布时间】:2017-08-22 18:19:03
【问题描述】:

我有一个 L 的数据框列表。 L 的元素(数据框)未命名。每个元素仅包含一个变量Var(对所有元素都相同)和一个观察值(跨元素唯一)。观察结果是随机“数字”的列表。 L 的元素可以看起来像::'data.frame': 1 obs. of 1 variable: $ Var: chr "\"4\", \"32\", \"25\", \"4\", "is.atomic(L[[1]]$Var) 返回 TRUE。我正在寻找一种将L 转换为未命名数字向量列表的方法。最终结果应该是:

> L
[[1]]
[1]  4 32  25 4

现在我有:

> L
[[1]]
                   Var
1 "4", "32", "25", "4",

我尝试了as.numeric,但不断收到警告NAs introduced by coercion,结果与预期不符。显然我做错了什么。任何帮助表示赞赏!

编辑:删除L 示例,因为它是不必要的。

【问题讨论】:

  • 你能分享一份你的清单吗?
  • 我编辑了这个问题。希望这就是你的意思!
  • 一个实际可重现的例子会更好,因为lapply(L,function(x) as.numeric(as.character(x$Var)))对我有用,但L的结构可能不一样。
  • 我明白了。不幸的是,我不知道该怎么做。我所知道的是列表的元素最初是ngramphrasetables。使用带有("\\bA\\b, 1, Var) 选项的gsub 将字符替换为“数字”。不知道有没有帮助?
  • 见@Andrew Gustars 的回答,类似的东西应该可以工作,因为混合中似乎有一些引号。或使用dput(L) 获取示例数据。

标签: r list vector dataframe numeric


【解决方案1】:

从外观上看,您的字符串需要分隔和去除引号。它们也可能是因素。试试这样的...

L <- list(data.frame(Var='"1","2","3","4"'),data.frame(Var='"3","4","5","6"'))

K <- lapply(L,function(df) as.numeric(gsub('"','',unlist(strsplit(as.character(df[1,1]),',')))))

【讨论】:

  • 这就像一个魅力,只是它在所有向量中引入了第五个NA 元素。知道为什么吗?
  • 你最后一个元素可能是, 或空字符串"",只需使用gsub 删除即可。
  • 看起来好像每个字符串的末尾都有一个逗号。如果它们的长度相同,您可以执行类似K &lt;- lapply(L,function(df) as.numeric(gsub('"','',unlist(strsplit(as.character(df[1,1]),','))[1:4]))) 的操作
  • 这也应该有效lapply(L,function(x) gsub(",","",noquote(gsub('"',"",x$Var))))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
相关资源
最近更新 更多