如何在r数据帧中获取行中的项目频率?

如何在r数据帧中获取行中的项目频率?,r,dataframe,dplyr,R,Dataframe,Dplyr,我有一个数据框,看起来像 GeneID person1 person2 ... person100 homo1 homo2 heter homo1count homo2count hetercount 1 AA AC AA AA CC AC 25 50 25 2 ..... 3 ..... 我怎么才能算25,50,25 我试着用apply作为 g <- functio

我有一个数据框,看起来像

GeneID   person1  person2 ... person100  homo1 homo2 heter homo1count homo2count hetercount
1        AA       AC           AA         AA   CC    AC     25         50        25
2  .....
3  .....
我怎么才能算25,50,25

我试着用apply作为

g <- function(df, AA) {
  x = table(df)
  AA = x[which(names(x) == df$homo1)]
  }
x = apply(temp,1,g)

g如果您先转向长格式,然后进行聚合,这会更容易。大概是这样的:

require(reshape2)
require(dplyr)

g <- c('AC', 'AA', 'CC')
n <- 30

df <- data.frame(gene_id=1:30, person1=sample(g,n,replace=TRUE),
                               person2=sample(g,n,replace=TRUE),
                               person3=sample(g,n,replace=TRUE),
                               person4=sample(g,n,replace=TRUE),
                               homo1=sample(g,n,replace=TRUE),
                               homo2=sample(g,n,replace=TRUE),
               stringsAsFactors=FALSE)

df %>% melt(c("gene_id", "homo1", "homo2")) %>% 
       group_by(gene_id) %>%
       summarise(homo1count=sum(homo1==value),
                 homo2count=sum(homo2==value) ) %>%
       merge(x=df)

如果您先转向长格式,然后进行聚合,这会更容易。大概是这样的:

require(reshape2)
require(dplyr)

g <- c('AC', 'AA', 'CC')
n <- 30

df <- data.frame(gene_id=1:30, person1=sample(g,n,replace=TRUE),
                               person2=sample(g,n,replace=TRUE),
                               person3=sample(g,n,replace=TRUE),
                               person4=sample(g,n,replace=TRUE),
                               homo1=sample(g,n,replace=TRUE),
                               homo2=sample(g,n,replace=TRUE),
               stringsAsFactors=FALSE)

df %>% melt(c("gene_id", "homo1", "homo2")) %>% 
       group_by(gene_id) %>%
       summarise(homo1count=sum(homo1==value),
                 homo2count=sum(homo2==value) ) %>%
       merge(x=df)


你想得到什么?第1行中的计数向量,或具有计数的变量?对于第一个,
vecCount,我想计算100个人中累计有多少个AA、CC、AC。但确切的字符串模式由homo1、homo2、heter决定,即下一行可能是CC、GG、CG;第3行可能是AA,TT,A每个基因可能是选择2个核苷形成A,C,G,T,不同于每一行注意@Neal Fultz的答案包括一个玩具data.frame,试图重现你的问题。在提问时,提供这样一个对象给其他人一个使用它的机会通常是一个好主意。你想得到什么?第1行中的计数向量,或具有计数的变量?对于第一个,
vecCount,我想计算100个人中累计有多少个AA、CC、AC。但确切的字符串模式由homo1、homo2、heter决定,即下一行可能是CC、GG、CG;第3行可能是AA,TT,A每个基因可能是选择2个核苷形成A,C,G,T,不同于每一行注意@Neal Fultz的答案包括一个玩具data.frame,试图重现你的问题。在提问时,提供这样一个对象给其他人一个使用它的机会通常是一个好主意。谢谢你的回答!我的问题是homo1每行都不一样。homo1在我答案的每行都不一样。我不明白你在问什么。homo1count是在homo1列的特定行出现的“XX”的计数,这就是这个答案产生的结果。上一条评论是在你第一条评论出现之前写的。不知怎么的,有一个时间差。自从你发表评论后,我一直在阅读代码并进行了尝试。非常感谢你的帮助!我对%>%了解不多,所以没有立即回复。很抱歉,谢谢你的回答!我的问题是homo1每行都不一样。homo1在我答案的每行都不一样。我不明白你在问什么。homo1count是在homo1列的特定行出现的“XX”的计数,这就是这个答案产生的结果。上一条评论是在你第一条评论出现之前写的。不知怎么的,有一个时间差。自从你发表评论后,我一直在阅读代码并进行了尝试。非常感谢你的帮助!我对%>%了解不多,所以没有立即回复。很抱歉。