Сортировка и вычисление суммы и ранга с новыми столбцами в R - PullRequest
0 голосов
/ 12 мая 2018

У меня есть 200 столбцов, и я хочу вычислить среднее значение и ранг, а затем сгенерировать столбцы.Вот пример данных

df<-read.table(text="Q1a	Q2a	Q3b	Q4c	Q5a	Q6c	Q7b
1	2	4	2	2	0	1
3	2	1	2	2	1	1
4	3	2	1	1	1	1",h=T)

Я хочу сложить a, b и c для каждой строки, а затем сложить их вместе.Далее я хочу рассчитать ранг для каждой строки.Я хочу создать следующую таблицу:

Q1a	Q2a	Q3b	Q4c	Q5a	Q6c	Q7b	a	b	c	Total	Rank
1	2	4	2	2	0	1	5	5	2	12	2
3	2	1	2	2	1	1	7	2	3	12	2
4	3	2	1	1	1	1	8	3	2	13	1

Ваша помощь очень ценится

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Вы также можете пойти с подходом tidyverse. Однако это дольше.

library(tidyverse)

df %>%
    rownames_to_column(var = "ID") %>%
    gather(question, value, -ID) %>% 
    mutate(type = substr(question, 3,3)) %>% 
    group_by(ID, type) %>% 
    summarise(sumType = sum(value, na.rm = TRUE)) %>% 
    as.data.frame() %>%
    spread(type, sumType) %>% 
    mutate(Total = a+b+c, 
           Rank =  match(Total, sort(Total, decreasing = T)))

Результаты:

  ID a b c Total Rank
1  1 5 5 2    12    2
2  2 7 2 3    12    2
3  3 8 3 2    13    1
0 голосов
/ 12 мая 2018

Надеюсь, это поможет!

library(dplyr)

df %>%
  cbind(sapply(c('a', 'b', 'c'), function(x) rowSums(.[, grep(x, names(.)), drop=FALSE]))) %>%
  mutate(Total = a + b + c, 
         Rank = match(Total, sort(Total, decreasing = T)))

Вывод:

  Q1a Q2a Q3b Q4c Q5a Q6c Q7b a b c Total Rank
1   1   2   4   2   2   0   1 5 5 2    12    2
2   3   2   1   2   2   1   1 7 2 3    12    2
3   4   3   2   1   1   1   1 8 3 2    13    1

Пример данных:

df <- structure(list(Q1a = c(1L, 3L, 4L), Q2a = c(2L, 2L, 3L), Q3b = c(4L, 
1L, 2L), Q4c = c(2L, 2L, 1L), Q5a = c(2L, 2L, 1L), Q6c = c(0L, 
1L, 1L), Q7b = c(1L, 1L, 1L)), class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...