Суммируйте строки для одного столбца вверх, которые имеют идентичные ключи на основе двух других столбцов и переименовывают другие значения - PullRequest
0 голосов
/ 14 мая 2018

Есть ли способ переименовать все значения для строк столбцов, которые отличаются по значению для этого случая?

Пример:

   #Data
   Key   Date   Value       Name      Type  Year
    C    2000-04   0.55     name1     x1    2000   <- 
    C    2000-04   0.60     name2     x2    2000   <-
    C    2000-05   1.2      Name 4    x4    2000
    A    2001-06   4        Name 2    x6    2001
    A    2001-07   5        Name 3    x1    2001
    A    2002-08   2        Name 1    x2    2002
    ...

> df1
  Key   Date    Value   Name     Type   Year
 1 C     2000-04  1.15  SUM      SUM   2000
 2 C     2000-05  1.2   Name 4    x4    2000       
 3 A     2001-06  4     Name 2    x6    2001  
 4 A     2001-07  5     Name 3    x1    2001   
 5 A     2002-08  2     Name 1    x2    2002

Итак, я хочу для своего столбцагод, чтобы сохранить значение 2000, так как оно одинаково в обеих строках.Для столбцов «Тип» и «Имя» я хочу отметить их, что значения были изменены.

Я пытался изменить код, который использовался в предыдущем вопросе, но мои навыки R-Skills еще недостаточно хороши, я думаю.

Спасибо:)

1 Ответ

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

Как насчет этого?

library(dplyr)

df1 <- df %>%
  group_by(Key, Date) %>%
  mutate(Value = sum(Value),
         Name  = ifelse(n() > 1, 'SUM', Name),      #identify rows where 'SUM' is applied and replace Name & type column with 'SUM'
         Type  = ifelse(n() > 1, 'SUM', Type)) %>%  
  filter(row_number() == 1)
df1

Вывод:

  Key   Date    Value Name  Type   Year
1 C     2000-04  1.15 SUM   SUM    2000
2 C     2000-05  1.20 Name4 x4     2000
3 A     2001-06  4.00 Name2 x6     2001
4 A     2001-07  5.00 Name3 x1     2001
5 A     2002-08  2.00 Name1 x2     2002

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

df <- structure(list(Key = c("C", "C", "C", "A", "A", "A"), Date = c("2000-04", 
"2000-04", "2000-05", "2001-06", "2001-07", "2002-08"), Value = c(0.55, 
0.6, 1.2, 4, 5, 2), Name = c("name1", "name2", "Name4", "Name2", 
"Name3", "Name1"), Type = c("x1", "x2", "x4", "x6", "x1", "x2"
), Year = c(2000L, 2000L, 2000L, 2001L, 2001L, 2002L)), .Names = c("Key", 
"Date", "Value", "Name", "Type", "Year"), class = "data.frame", row.names = c(NA, 
-6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...