gpt4 book ai didi

r - 合并行并保留基于另一列的值

转载 作者:行者123 更新时间:2023-12-04 02:35:16 24 4
gpt4 key购买 nike

我从许多调查中获得了数据。每个调查都可以使用更新的值发送多次。对于数据集中的每个调查/行,都有提交(创建)调查的日期。我想合并每个调查的行,并保留第一个调查的日期,但保留最后一个调查的其他数据。

一个简单的例子:

#>   survey    created var1 var2
#> 1 s1 2020-01-01 10 30
#> 2 s2 2020-01-02 10 90
#> 3 s2 2020-01-03 20 20
#> 4 s3 2020-01-01 45 5
#> 5 s3 2020-01-02 50 50
#> 6 s3 2020-01-03 30 10

期望的结果:

#>   survey    created var1 var2
#> 1 s1 2020-01-01 10 30
#> 2 s2 2020-01-02 20 20
#> 3 s3 2020-01-01 30 10

示例数据:

df <- data.frame(survey = c("s1", "s2", "s2", "s3", "s3", "s3"),
created = as.POSIXct(c("2020-01-01", "2020-01-02", "2020-01-03", "2020-01-01", "2020-01-02", "2020-01-03"), "%Y-%m-%d", tz = "GMT"),
var1 = c(10, 10, 20, 45, 50, 30),
var2 = c(30, 90, 20, 5, 50, 10),
stringsAsFactors=FALSE)

我已经尝试以不同的方式使用 group_bysummarize 但无法使其正常工作,我们将不胜感激!

最佳答案

按'survey'分组后,将'created'更改为'created'中的firstmin值,然后切片最后一行 (n())

library(dplyr)
df %>%
group_by(survey) %>%
mutate(created = as.Date(first(created))) %>%
slice(n())
# A tibble: 3 x 4
# Groups: survey [3]
# survey created var1 var2
# <chr> <date> <dbl> <dbl>
#1 s1 2020-01-01 10 30
#2 s2 2020-01-02 20 20
#3 s3 2020-01-01 30 10

或者使用base R

transform(df, created = ave(created, survey, FUN = first)
)[!duplicated(df$survey, fromLast = TRUE),]

关于r - 合并行并保留基于另一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62238086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com