繁体   English   中英

R中的列计数。刚开始将其用于GWAS,我迷路了

[英]Column counting in R. Just started using it for GWAS and I am lost

谁能帮我解决如何计算每行单元格中字符实例的数量吗? 我有一个要排序的1000万个snps文件。

Direction
?????+-+-
?+-+-????
?-+-+??-+

上面是我拥有的许多专栏之一的示例。 我要计算的是“?”的数量 每行中的每个字符,然后添加一个新列,并将该计数作为数值。

我完全是个初学者,对此深有体会,因此我们将不胜感激。

谢谢。

给你两个答案

a <- data.frame(direction = c("?????+-+-", "?+-+-????","?-+-+??-+"),  
 stringAsFactors = F)
a$return <- lengths(regmatches(a$direction, gregexpr("\\?", a$direction)))

或根据评论

a$return <- nchar(gsub("[^?]", "", a$direction))

都回来了

'data.frame':   3 obs. of  2 variables:
 $ direction: chr  "?????+-+-" "?+-+-????" "?-+-+??-+"
 $ return   : int  5 5 3

有很多方法可以做到这一点,取决于您要寻找的东西。

更新资料

tidyverse中的程序包可能不是以R为基数的,但它们对于数据整理很有用,可用于轻松地将几个调用串在一起。

install.packages("dplyr")
library(dplyr)
df <- data.frame(Direction = c("???????????-?", "???????????+?", "???????????+?", "???????????-?"), stringsAsFactors = F)
df %>% 
  mutate(qmark = nchar(gsub("[^?]", "", Direction)),
         pos = nchar(gsub("[^+]", "", Direction)),
         neg = nchar(gsub("[^-]", "", Direction)),
         qminus = qmark-(pos+neg),
         total = nchar(Direction))  


      Direction qmark pos neg qminus total
1 ???????????-?    12   0   1     11    13
2 ???????????+?    12   1   0     11    13
3 ???????????+?    12   1   0     11    13
4 ???????????-?    12   0   1     11    13

但是,如果数据集的长度为1000万行,则可能需要根据一些基准测试使用stringi

install.packages("stringi")
library(stringi)
df %>% 
  mutate(qmark = stri_count(Direction, fixed = "?"),
         pos = stri_count(Direction, fixed = "+"),
         neg = stri_count(Direction, fixed = "-"), 
         qminus = qmark-(pos+neg))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM