【发布时间】:2018-09-19 18:16:38
【问题描述】:
我试图从不同的列中获取一个值,但在字符串中的相同位置。列值如下所示:
"0/1:15,0,52:3:13"
"1/0:15,0,52:3:13"
"0/0:15,0,52:3:13"
"1/1:15,0,52:3:13"
我想通过0/1 过滤并通过data.frame 获取与该条件匹配的所有行。为此我可以使用:
df1 <- dplyr::filter(df, grepl("0/1", nameofthecolumn))
它可以工作,但是当我尝试按 2 个条件(如0/1 和1/1)进行过滤时,我尝试以下行但它不起作用。该行返回一个空的data.frame0 obs. of X variables:
df1 <- dplyr::filter(df, grepl(paste("0/1", "1/1"), paste("namesofthecolumn1", "nameofthecolumn2"))
然后我需要修复该函数并为不同的列设置不同的条件,如果一行(X 列的同一行)包含0/1,另一列1/1 和另一个“0/0”,计数所有的 1,所以我得到了值:3。
那我要问两个问题:
1 - 如何修复我的行以按条件列表和列列表进行过滤?
2 - 如何通过列列表对一行中的所有 1 进行求和/计数?
任何帮助将不胜感激。
编辑:
data.frame 工作示例:
column1 <- c("0/1:15,0,52:3:13", "1/1:152,144,0,132,107,129:49:99", "0/1:26,0,7:54:10", "0/0:0,12,115:4:14", "1/1:219,57,0:19:99", "0/0:0,21,255:96:21")
column2 <- c("1/1:15,0,52:3:13", "1/1:152,144,0,132,107,129:49:99", "0/1:26,0,7:54:10", "0/1:0,12,115:4:14", "0/0:219,57,0:19:99", "0/0:0,21,255:96:21")
chrom <- c("chr0", "chr0", "chr1", "chr1", "chr2", "chr2")
df <- data.frame(chrom, column1, column2)
我想过滤例如 0/1 和 1/1,所以我得到所有至少有 0/1 或 1/1 的行:
chrom column1 colum2
chr 0 0/1:15,0,52:3:13 1/1:15,0,52:3:13
chr 0 1/1:152,144,0,132,107,129:49:99 1/1:152,144,0,132,107,129:49:99
chr 1 0/1:26,0,7:54:10 0/1:26,0,7:54:10
chr 1 0/0:0,12,115:4:14 0/1:0,12,115:4:14
chr 2 1/1:219,57,0:19:99 0/0:219,57,0:19:99
我得到了除最后一行之外的所有行,因为最后一行不包含 0/1 或 1/1。
【问题讨论】:
-
您不能简单地删除第一个
,之前子字符串中:之前的所有内容吗?或者您可以构建一个管道,在其中提取:之前的子字符串,并创建一种用于过滤或其他任何内容的“主键”列 -
删除元素这不是一个选择,因为我需要每一行中每一列的完整字符串。
-
这个想法是有一个data.frame,其中每一行都是像
c("0/1", "0/1:15,0,52:3:13")这样的向量。所以你没有删除任何东西,你只需使用0/1来做你需要的操作。但是,我无法写出答案,因为我没有真正理解您的问题,因为您既没有共享输入数据,也没有共享预期的输出。 -
这只是过滤并获取所有具有列值
"0/1:15,0,52:3:13"的X列值如“0/1”或c(“0/1”,“1/1”)的行并获得一个包含所有这些过滤行的 data.frame。 -
我想得到一个data.frame,看我最后一个回答的遗言