1

次のデータセットがあります

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))

複数の行を含むグループ (変数 = 'グループ') 内の複数の列 (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 の一意の文字をカウントし、それを合計して、「合計」が 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」はカウントされません。最終製品は、「合計」が 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))

ご協力ありがとうございました

4

3 に答える 3