数据框中出现的次数
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))
我有以下数据框,我想计算第一列每一行的出现次数,然后将 "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))