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

это мой первый пост, так что не будьте слишком резкими, если я здесь что-то не так делаю.Я новичок в языке программирования r и получил набор данных, который имеет около 4000 строк.

 #Data
 Key   Date   Value       ...other columns
 C    2000-04   0.55         name1     x1   <- 
 C    2000-04   0.60         name2     x2   <-
 C    2000-05   1.2
 A    2001-06   4
 A    2001-07   5
 A    2002-08   2
 ...

Так что я понял, что у меня есть некоторые значения для той же даты и того же ключа, используя следующий код :)

 >Data <- as.data.frame(Data)
 >Duplicates <- which(duplicated(Data[c('Key','Date')]),) 
 >View(Duplicates)

Итак, я уже знаю, где находятся эти похожие строки, основанные на ключе и дате, я хочу добавить.Поскольку мой набор данных имеет только 4000 строк, я мог бы легко записать его в .csv или excel и добавить эти строки вместе, используя мои голые руки.

 >write.csv(Date, file = ...)

Но я хотел бы знать, как это можно решить с помощьюкод.Единственная проблема, которую я вижу, состоит в том, что другие мои столбцы в этой определенной строке имеют разные имена «name1 / name2» и «x1 / x2».Моя новая таблица данных должна выглядеть следующим образом:

 #Data
 Key   Date   Value        ...other columns
 C    2000-04   1.15         name1     x1       <- Add up to 1
 C    2000-05   1.2
 A    2001-06   4
 A    2001-07   5
 A    2002-08   2
 ...

Поэтому я хотел бы сделать из 2 строк, которые похожи по ключу и дате в одну строку, и поместить в другие столбцы моей новой строки имена / значенияиз моего первого ряда.

Спасибо!:)

1 Ответ

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

Если я правильно понял ваш вопрос, то вы можете попробовать это -

library(dplyr)

df1 <- df %>%
  group_by(Key, Date) %>%
  mutate(Value = sum(Value)) %>%
  filter(row_number() == 1)

Вывод:

> df1
  Key   Date    Value col4  col5 
1 C     2000-04  1.15 name1 x1   
2 C     2000-05  1.2  n     x    
3 A     2001-06  4    n     x    
4 A     2001-07  5    n     x    
5 A     2002-08  2    n     x 

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

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), col4 = c("name1", "name2", "n", "n", "n", 
"n"), col5 = c("x1", "x2", "x", "x", "x", "x")), class = "data.frame", row.names = c(NA, 
-6L))
#  Key    Date Value  col4 col5
#1   C 2000-04  0.55 name1   x1
#2   C 2000-04  0.60 name2   x2
#3   C 2000-05  1.20     n    x
#4   A 2001-06  4.00     n    x
#5   A 2001-07  5.00     n    x
#6   A 2002-08  2.00     n    x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...