数据框中出现的次数

Number of occurences in a dataframe

我有以下数据框,我想计算第一列每一行的出现次数,然后将 "freq" 作为另一列附加到数据框:

df:

gene    a    b    c
abc     1    NA   1
bca     NA   1    1
cba     1    2    1

我的 df 更大,所以这只是一个可扩展的例子。

想要的数据框是:

gene    a    b    c    freq
abc     1    NA   1     2
bca     NA   1    1     2
cba     1    2    1     3

我试过的代码是:

g <- df %>% mutate(numtwos = rowSums(. > 0))

df$freq <- apply(df , 1, function(x) length(which(x>0)))

但它不起作用,因为如果连续应该有(例如)150 次重复,我每行只获得 2 次。

欢迎任何帮助或其他观点!

谢谢

我有一段时间没用过 R,所以我不会粘贴代码,但是你可以创建一个新的 df,将初始的 df 按基因分组,然后 merge/join 它到你的初始 df另一行代码。

我们可以先将Na转换为"NA"

library(dplyr)
df %>%
   mutate_at(vars(a:c), ~ as.numeric(na_if(., "Na"))) %>%
   mutate(freq = rowSums(select(., a:c), na.rm = TRUE))
#  gene  a  b c freq
#1  abc  1 NA 1    2
#2  bca NA  1 1    2
#3  cba  1  1 1    3

这里的值都是1,所以和非NA求和是一样的

df %>%
   mutate_at(vars(a:c), ~ as.numeric(na_if(., "Na"))) %>%
   mutate(freq = rowSums(!is.na(select(., a:c))))

数据

df <- structure(list(gene = c("abc", "bca", "cba"), a = c("1", "Na", 
"1"), b = c("Na", "1", "1"), c = c(1L, 1L, 1L)), 
class = "data.frame", row.names = c(NA, 
-3L))