我有一个看起来像这样的数据框:
GID7173723 GID4878677 GID88208 GID346403 GID268825 GID7399578
1 A A A A G A
2 T T T T C T
3 G G G G G G
4 A A A A A A
5 G G G G G G
6 G G G G G G
7 A A A A A A
8 G G G G G G
9 A A A A A A
10 A A A A A A
但是,当我使用apply函数按行获取所有“ A”的总和除以数据帧中的列数时,我得到的是A的总和,而不是行总和。
这是我写的函数:
myfun <- function(x){
out <- sum(x=='A')/ncol(x)
return(out)
}
apply(df,MARGIN = 1,FUN=myfun)
我无法弄清楚为什么apply函数会给我A的总和而不是逐行显示。
答案 0 :(得分:1)
我们可以使用rowSums
rowSums(df1=="A")/ncol(df1)
或使用`rowMeans
rowMeans(df1 == "A")
对于apply
,ncol
并不适用,因为它是vector
,因此我们需要length(x)
myfun <- function(x){
sum(x=='A')/length(x)
#or
# mean(x == "A")
}
答案 1 :(得分:0)
apply()
的解决方案
apply(df, 1,FUN=function(rowVec) table(rowVec)['A'])
table()
给出了每个碱基的计数-您从它们中选择'A'。