изменить, объединить, как выполнить несколько действий над двумя векторами членства? - PullRequest
1 голос
/ 28 марта 2020

Мне кажется, я наконец-то понял, как правильно задать вопрос ... Я перепробовал кучу вещей, а затем неправильно определил проблему с таблицей (), которая была единственной вещью, которую я использовал, хотя, вероятно, не самой лучшей. предмет. Моя проблема заключается в том, как взять два вектора равной длины фактора и членства и получить различные распределения факторов в группе. Итак, мои данные выглядят как «dat»

group<-rep(c("a","b","c"), each=4)
mem<-c(1:6,1:3,1:2,1)
dat<-cbind(group,rep)
dat

Как мне превратить их во что-нибудь, скажем, с 9 столбцами и 3 строками, со столбцом 1 для имен групп, столбцами 2: 7 для числа члены в каждой группе, столбец 8 для итогов группы и следующие столбцы для некоторых групповых показателей, а не подсчета - что-то похожее на это:

 group mem1 mem2 mem3 mem4 mem5 mem6 total rate1
 a.     1.   1.   1.   1.   0.   0.    4.    0.25
 b.     1.   1.   0.   0.   1.   0.    4.    0.25
 c.     2.   1.   1.   0.   0.   0.    4.    0.5

Должен быть простой способ, верно? Высоко ценится !!!!

1 Ответ

1 голос
/ 28 марта 2020

Первый шаг - это таблица их:

as.data.frame.matrix(table(dat[,1],dat[,2]))
      1 2 3 4 5 6
    a 1 1 1 1 0 0
    b 1 1 0 0 1 1
    c 2 1 1 0 0 0

Как только вы это сделаете, нужно выполнить другие вычисления:

counts = as.data.frame.matrix(table(dat[,1],dat[,2]))
total = rowSums(counts)
rate = sweep(counts,2,total,"/")
colnames(counts) = paste0("mem",colnames(counts))
colnames(rate) = paste0("rate",colnames(rate))
res = data.frame(group=rownames(counts),counts,total=total,rate)
res

  group mem1 mem2 mem3 mem4 mem5 mem6 total rate1 rate2 rate3 rate4 rate5 rate6
a     a    1    1    1    1    0    0     4  0.25  0.25  0.25  0.25  0.00  0.00
b     b    1    1    0    0    1    1     4  0.25  0.25  0.00  0.00  0.25  0.25
c     c    2    1    1    0    0    0     4  0.50  0.25  0.25  0.00  0.00  0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...