如何在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”的计数,这就是这个答案产生的结果。上一条评论是在你第一条评论出现之前写的。不知怎么的,有一个时间差。自从你发表评论后,我一直在阅读代码并进行了尝试。非常感谢你的帮助!我对%>%了解不多,所以没有立即回复。很抱歉。