【发布时间】:2019-04-16 15:19:30
【问题描述】:
我有以下数据集
dat <- data.frame(group = c(1,1,1,1,1), id = c(1,2,3,4,5),
t1 = c('a','a','b','b','c'),p1 = c(0.98,1,0.5,0.9,1),
t2 = c('b',NA,'a','c',NA),p2 = c(0.02,NA,0.25,0.10,NA),
t3 = c(NA,NA,'c',NA,NA),p3 = c(NA,NA,0.25,NA,NA))
我正在尝试计算包含多行(变量 = 'group')的组中多列(t1、t2、t3)中存在的唯一字符数。是否计算每个字符取决于相关的 p1,p2,p3 值 >= 0.05。
我已尝试输入此代码来计算所有列中的唯一字符
b <- dat %>%
group_by(group) %>%
mutate(total = sum(n_distinct(t1[p1 >= 0.05], na.rm = TRUE),
n_distinct(t2[p2 >= 0.05], na.rm = TRUE),
n_distinct(t3[p3 >= 0.05], na.rm = TRUE)))
结果是它计算了 t1、t2 和 t3 的唯一字符,然后将其相加得到以下数据集,其中 'total' 为 6
dat <- data.frame(group = c(1,1,1,1,1), id = c(1,2,3,4,5),
t1 = c('a','a','b','b','c'),p1 = c(0.98,1,0.5,0.9,1),
t2 = c('b',NA,'a','c',NA),p2 = c(0.02,NA,0.25,0.10,NA),
t3 = c(NA,NA,'c',NA,NA),p3 = c(NA,NA,0.25,NA,NA),
total = c(6,6,6,6,6))
但是,我要做的是计算所有列中唯一字符的总数。换句话说,如果在 t1 列中看到“a”,则不要在其他列 (t2,t3) 中计算“a”。最终产品将类似于以下数据集,其中“total”为 3(表示 a、b 和 c 是存在的唯一字符)
dat <- data.frame(group = c(1,1,1,1,1), id = c(1,2,3,4,5),
t1 = c('a','a','b','b','c'),p1 = c(0.98,1,0.5,0.9,1),
t2 = c('b',NA,'a','c',NA),p2 = c(0.02,NA,0.25,0.10,NA),
t3 = c(NA,NA,'c',NA,NA),p3 = c(NA,NA,0.25,NA,NA),
total = c(3,3,3,3,3))
感谢您的帮助
【问题讨论】: