我有一个问题,如何删除单个时间戳的重复值。 我有一个拥有数百万行的大数据。 这是我的有问题的示例数据帧的样子:
Name <-c('PP_1','PP_1','PP_1','PP_1','PP_1')
category<-c('GT','GT','GT','GT','GT')
year<-c('2025','2025','2025','2025','2025')
month<-c('12','12','12','12','12')
day <-c('30','30','30','30','30')
period<-c('1','1','1','1','1')
value<-c('53.55','0.00','0.00','0.00','0.00')
df<-data.frame(Name,category,year,month,day,period,value)
df<-transform(df, Name = as.character(Name),category = as.character(category),year = as.integer(year),
month = as.integer(month),day = as.integer(day),period = as.numeric(period),value = as.numeric(value))
如何为相同的时间戳清除这些多余的多个值(此处为零)?就像,我想保持最高的价值,例如'53 .55'并删除同一时间段内的所有零 最终的df应该看起来像
Name <-c('PP_1')
category<-c('GT')
year<-c('2025')
month<-c('12')
day <-c('30')
period<-c('1')
value<-c('53.55')
df<-data.frame(Name,category,year,month,day,period,value)
数据帧中有多个Names
,全年中有values
,当我使用reshape_df<- tidyr::spread(df,Name,value)
时,它会给我Error: Each row of output must be identified by a unique combination of keys. Keys are shared for 1032 rows
。我正在尝试使用df%>% gather(Name,year, month, day, period, value)
函数,但是没有运气。有人可以帮助我获得正确的解决方案吗?
预先感谢。
答案 0 :(得分:1)
subset
怎么样?
subset(df, subset=!duplicated(cbind(Name, category, year, month, day, period)))
# Name category year month day period value
#1 PP_1 GT 2025 12 30 1 53.55
这将保留指定变量的每个组合的第一条记录。如果必须使用dplyr,请尝试filter
:
library(dplyr)
filter(df, !duplicated(cbind(Name, year, month, day, period)))
“唯一性”的定义取决于您在过滤器中放置的变量。
答案 1 :(得分:1)
您可以使用
library(dplyr)
df %>%
group_by(across(-value)) %>%
mutate(value = as.numeric(as.character(value))) %>%
filter(value==max(value), .preserve = TRUE)
返回
Name category year month day period value
<fct> <fct> <fct> <fct> <fct> <fct> <dbl>
1 PP_1 GT 2025 12 30 1 53.6