对于一列具有基于另外两列具有相同键的行并且替换其他值

时间:2018-05-13 08:01:00

标签: dataframe

这是我的第一篇文章,所以如果我在这里做错了,不要太苛刻。 我是编程语言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
 ...

所以我发现我使用以下代码对同一个Date和相同的Key确实有一些值:)

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

所以我已经知道基于Key和Date的那些类似的行在哪里,我想加起来。 由于我的数据集只有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
 ...

所以我想从密钥和日期的两行中找出两行,并在我的新行的其他列中添加第一行的名称/值。

谢谢! :)

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以试试这个 -

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