【发布时间】:2017-02-26 00:52:13
【问题描述】:
我有一个采用这种形式的向量列表:
> g
[[1]]
[1] "L" "14" "L" "39" "L" "61" "B" "0" "L" "15" "L" "59" "W" "64"
[[2]]
[1] "L" "62" "D" "31" "L" "10" "L" "30" "B" "0" "D" "45" "L" "43"
[[3]]
[1] "H" "0" "L" "11" "L" "35" "W" "45" "H" "0" "L" "40" "L" "42"
我的目标是在这个结构上使用mapply,并将 14 列中的每一列都变成一个向量。第一列是:
[[1]]
[1] "L"
[[2]]
[1] "L"
[[3]]
[1] "H"
第二列是:
[[1]]
[1] "14"
[[2]]
[1] "62"
[[3]]
[1] "0"
等等。我怀疑该结构将是一个矩阵(?),但我不确定。我使用了很多lapply 和stringr 的str_extract_all 和正则表达式来理解这一点,但我不确定如何继续。我怀疑该函数会使用如下模式:"[A-Z]{1}" 用于文本,"[:digit:]{1}" 我知道mapply 可以返回一个矩阵,但我不知道从哪里开始。
【问题讨论】:
-
在这里使用正则表达式没有意义。也许解释一下这些数据的来源(例如,csv 文件、网络抓取、手动输入)以及您需要如何使用它(例如,用
pkg::xyz()绘制它)会有所帮助。 (为了清楚起见:你的第一个块是一个简单的list,其中每个元素都是一个character向量(不是列表)。你的第二个和第三个块都是相同的:一个简单的list,每个元素都是一个@ 987654336@ 向量(长度为 1)。 -
我不知道 R - 但我同意 @r2evans 正则表达式在这里似乎有点矫枉过正,快速搜索一下将我引向这个:stackoverflow.com/questions/8464312/… 这似乎相当接近,但我不会假装我知道 R 并尝试更改以完全适合您的情况。
-
它只是分解文件的一大组模式中的一小部分——这只是其中的一部分。我基本上是在寻找
function,它将 this 作为矩阵或一系列列表输出。 -
有一条评论(已删除)建议
do.call(rbind, g)。它将这个g变成了一个整洁的matrix。但是你说你希望每一列都是一个向量,所以像lapply(seq_along(g[[1]]), function(i) sapply(g,[[, i))这样的东西给出了那个,但是你提到“返回一个矩阵”,所以我很困惑你说什么,你需要什么,你描述什么。 -
道歉 - 我仍在研究如何描述这些结构。我可能可以使用矩阵或列表:看起来
do.call(rbind, g)也可以完美地工作并且似乎也是相同的结构。我必须阅读do.call(rbind, ...)- 谢谢!
标签: r regex data-conversion mapply