Объединяя два ряда в R - PullRequest
       6

Объединяя два ряда в R

0 голосов
/ 08 декабря 2018

Это фрагмент моих данных

Aaron Brook   450 36 25 .124 .530
Arron Afflalo 980 25 40 .128 .597
Arron Afflalo 236 25 94 .223 .621

Я пытаюсь объединить строки Arron Afflalo, но в то же время добавляю столбец 1-3, но беру среднее из столбцов 4-5.

Таким образом, окончательный вывод данных выглядит как

Arron Afflalo 1216 50 134 .176 .609

Есть ли какой-нибудь быстрый способ сделать это.Если нет, есть ли способ просто удалить все повторяющиеся строки?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Используя tidyverse, если вам нужна сводка для всех имен и фамилий:

df %>%
 group_by(V1, V2) %>%
 mutate_at(3:5, funs(sum(.))) %>%
 mutate_at(6:7, funs(mean(.))) %>%
 summarise_all(funs(first(.)))

  V1    V2         V3    V4    V5    V6    V7
  <fct> <fct>   <int> <int> <int> <dbl> <dbl>
1 Aaron Brook     450    36    25 0.124 0.530
2 Arron Afflalo  1216    50   134 0.176 0.609

Или если вы хотите сводку только для этого конкретного имени:

df %>%
 filter(V1 == "Arron" & V2 == "Afflalo") %>%
 mutate_at(3:5, funs(sum(.))) %>%
 mutate_at(6:7, funs(mean(.))) %>%
 summarise_all(funs(first(.)))

     V1      V2   V3 V4  V5     V6    V7
1 Arron Afflalo 1216 50 134 0.1755 0.609

Данные:

df <- read.table(text = "Aaron Brook   450 36 25 .124 .530
Arron Afflalo 980 25 40 .128 .597
Arron Afflalo 236 25 94 .223 .621")
0 голосов
/ 08 декабря 2018

Использование dplyr:

library(dplyr)
df <- data.frame(name = c("Aaron Brook", "Arron Afflalo", "Arron Afflalo"), 
                 x = c(450, 980, 236), y = c(36, 25, 25), 
                 a = c(.124, .128, .223), b = c(.530, .597, .621))

df %>% 
   filter(name == "Arron Afflalo") %>%
   group_by(name) %>%
   summarize(sum_x = sum(x), sum_y = sum(y), mean_a = mean(a), mean_b = mean(b))

Если вы не знаете имен столбцов и только их порядка, вы также можете заменить последнюю строку на:

   summarize(sum_x = sum(.[[2]]), sum_y = sum(.[[3]]), mean_a = mean(.[[4]]), mean_b = mean(.[[5]]))
...