【发布时间】:2018-12-26 13:21:38
【问题描述】:
我有一个大文件 ~100k 行和 100 列,我想根据另一列创建提取四列的信息。有一个名为Caller 的列,该列告诉您哪些列.sample 将包含noSample 以外的信息。
我已经尝试过使用if and else if 语句,但有时会满足两个条件,编写所有可能的组合需要付出很多努力,我很确定有更好的方法来做到这一点
我的真实 data.frame 看起来像这样:
编辑
Df <- data.frame(A = c("chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1"),
B= c(10,12,13,14,15,16,17),
Caller = c("A", "B", "C", "D", "A,C", "A,B,C", "B,D"),
A.sample = c("3xd|432", "noSample","noSample","noSample","1234|567|87sd","234|456|897a","noSample"),
dummy1 = 1:7,
B.sample = c("noSample", "456|789|asd", "noSample","noSample","noSample","674e|7892|123|432","bgcf|12er|567|zxs3|12ple"),
dummy2 = 1:7,
C.sample = c("noSample","noSample", "zxc|vbn|mn","noSample","gfd3|123|456|789","674e|7892|123","noSample" ),
dummy3 = 1:7,
D.sample = c("noSample","noSample", "noSample", "poi|uyh|gfrt|562", "noSample", "noSample", "567|zxs3|12ple"), stringsAsFactors=FALSE)
我想为每一行提取一个样本向量。这可以存储在列表或另一个 R 对象上。我将使用这些样本与一个 data.frame 进行匹配,其中每个样本都与一个进程相关联。
My desired output would be
>row1
3xd|432
>row2
456|789|asd
>row3
zxc|vbn|mn
>row4
poi|uyh|gfrt|562
>row5
[1]1234|567|87sd [2]gfd3|123|456|789
>row6
[1]234|456|897a [2]674e|7892|123|432 [3]674e|7892|123
>row7
[1]bgcf|12er|567|zxs3|12ple [2]567|zxs3|12ple
我想要的输出不包括样本之间的管道 |,但我可以使用 strsplit 摆脱它
由于 data.frame 很大,因此速度至关重要。
【问题讨论】:
-
您似乎正试图从数据框中获取带状对角线。您可能希望将数据格式化为表格/矩阵,以便理解这一点。
-
@TimBiegeleisen,它并不总是完美的对角线,在某些情况下,一整列样本的所有值都可能是
noSample -
那个格式怎么样?试着给我们一个最小的问题。
-
对不起,如果我不明白你的意思,但我只想从带有
noSample的列中提取样本信息,并且该信息必须以某种方式按行索引 -
在输出向量中用[1]等表示样本有多重要?