применить функцию в символьном фрейме данных - PullRequest
0 голосов
/ 15 октября 2018

У меня есть фрейм данных, который выглядит следующим образом:

 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 дает мне общую суммуА и не по ряду.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Решение с apply()

apply(df, 1,FUN=function(rowVec) table(rowVec)['A'])

table() дает счет каждой из баз - вы выбираете из них букву «А».

0 голосов
/ 15 октября 2018

Мы можем использовать 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")

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...