Усреднить только дублированные строки и заменить значение в определенном столбце - PullRequest
1 голос
/ 31 марта 2020

У меня есть фрейм данных D:

surname   name   salary
Red        A      1000
Green      B       900
Green      A      1100
Blue       C      1000
Blue       B      1000
Blue       F       800
Violet     F      1200

В некоторых строках нет копий в surname, в других - да.

Мне нужно агрегировать строки только там, где дублируется фамилия, чтобы усреднить значения зарплаты и изменить имя на «X».

Я пробовал что-то, используя duplicated(), но он оставил один дубликат как оригинальный и изменил другие.

D$name<-replace(D$name,duplicated(D$surname),"X")

А также мне не удалось усреднить значения salary.

Спасибо!

1 Ответ

0 голосов
/ 31 марта 2020

Мы можем использовать

D$name <- replace(D$name,duplicated(D$surname)|duplicated(D$surname, 
          fromLast = TRUE),"X")

Если нам нужно создать средний столбец

library(dplyr)
D %>% 
   group_by(surname) %>% 
   mutate(average = mean(salary))

data

D <- structure(list(surname = c("Red", "Green", "Green", "Blue", "Blue", 
"Blue", "Violet"), name = c("A", "B", "A", "C", "B", "F", "F"
), salary = c(1000L, 900L, 1100L, 1000L, 1000L, 800L, 1200L)), class = "data.frame", row.names = c(NA, 
-7L))
...