我有一个.txt文件,看起来像这样:
rs1 NC AB NC
rs2 AB NC AA
rs3 NC NC NC
...
Run Code Online (Sandbox Code Playgroud)
对于每一行,我想计算"NC"的频率,以便我的输出如下所示:
rs1 2
rs2 1
rs3 3
...
Run Code Online (Sandbox Code Playgroud)
有人能告诉我如何在R或Linux中执行此操作吗?非常感谢!
df$count <- rowSums(df[-1] == "NC")
# V1 V2 V3 V4 count
# 1 rs1 NC AB NC 2
# 2 rs2 AB NC AA 1
# 3 rs3 NC NC NC 3
Run Code Online (Sandbox Code Playgroud)
我们可以rowSums在从这个表达式创建的矩阵上使用df[-1] == "NC".
dat <- read.table(text="rs1 NC AB NC rs2 AB NC AA rs3 NC NC NC")
dat <- rbind(dat, dat, dat, dat)
Run Code Online (Sandbox Code Playgroud)
您可以使用 rowwisetable来获取每行的频率在这种情况下,第 1 行到第 4 行的频率与我复制数据时相等
freq <- apply(dat, 1, table)
1 2 3 4 # row-number
AA 1 1 1 1
AB 2 2 2 2
NC 6 6 6 6
rs1 1 1 1 1
rs2 1 1 1 1
rs3 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
如果您想对所有行进行聚合频率,请使用
rowSums(freq)
AA AB NC rs1 rs2 rs3
4 8 24 4 4 4
Run Code Online (Sandbox Code Playgroud)