R 基于另一列删除一列中的重复行,并保持其他列不变
我在这里尝试了很多解决方案,但没有一个能够正确工作<代码>唯一功能让我最接近。我的数据如下所示:R 基于另一列删除一列中的重复行,并保持其他列不变,r,dataframe,duplicates,R,Dataframe,Duplicates,我在这里尝试了很多解决方案,但没有一个能够正确工作唯一功能让我最接近。我的数据如下所示: id second var1 var2 100 20 3 4 100 21 3 3 100 22 4 3 100 23 4 3 100 24 4 4 100 22 3 3 100 23 3 3 它通常每300秒左
id second var1 var2
100 20 3 4
100 21 3 3
100 22 4 3
100 23 4 3
100 24 4 4
100 22 3 3
100 23 3 3
它通常每300秒左右重复10秒左右。每个会话大约为1200秒。我想删除会话中的重复秒数,并取var1和var2中正在折叠的任何秒数的平均值,如果不是,则取保留原始值的平均值。如果var1和var2是非唯一的,我尝试的所有方法都只会删除重复项?这将创建一个新的数据帧,其中包含您要求的要求 为了解释,您实际上不需要删除任何内容,只需要根据公共值对val1/2s进行分组,在本例中为id和second
library(tidyverse)
new_df <- df %>%
group_by(id, second) %>%
summarise(var1 = mean(var1),
var2 = mean(var2)
)
库(tidyverse)
新的_df%
分组依据(id,秒)%>%
总结(var1=平均值(var1),
var2=平均值(var2)
)
您可以使用base-R
功能执行此操作:
aggregate(. ~ id+second, dat, mean)
## id second var1 var2
## 1 100 20 3.0 4
## 2 100 21 3.0 3
## 3 100 22 3.5 3
## 4 100 23 3.5 3
## 5 100 24 4.0 4
使用dplyr
package可以完成(类似于前面的答案,只需稍加调整):
数据:
dataggregate(.~id+second,mydata,mean)
library(dplyr)
dat %>% group_by(id, second) %>%
summarise_all(mean)
## # A tibble: 5 x 4
## # Groups: id [?]
## id second var1 var2
## <int> <int> <dbl> <dbl>
## 1 100 20 3.0 4
## 2 100 21 3.0 3
## 3 100 22 3.5 3
## 4 100 23 3.5 3
## 5 100 24 4.0 4
library(data.table)
unique(setDT(dat), by = c('id','second'))
# id second var1 var2
# 1: 100 20 3 4
# 2: 100 21 3 3
# 3: 100 22 4 3
# 4: 100 23 4 3
# 5: 100 24 4 4
dat <- structure(list(id = c(100L, 100L, 100L, 100L, 100L, 100L, 100L
), second = c(20L, 21L, 22L, 23L, 24L, 22L, 23L), var1 = c(3L,
3L, 4L, 4L, 4L, 3L, 3L), var2 = c(4L, 3L, 3L, 3L, 4L, 3L, 3L)), .Names = c("id",
"second", "var1", "var2"), .internal.selfref = <pointer: 0x02af24a0>, row.names = c(NA,
7L), class = c("data.table", "data.frame"))