在字符数据框中应用功能

时间:2018-10-15 16:10:33

标签: r

我有一个看起来像这样的数据框:

 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的总和而不是逐行显示。

2 个答案:

答案 0 :(得分:1)

我们可以使用rowSums

rowSums(df1=="A")/ncol(df1)

或使用`rowMeans

rowMeans(df1 == "A")

对于applyncol并不适用,因为它是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'。