我有一个数据框,其中包含两列a和b,a表示组,b是每个组的重复值。为了便于说明,我添加了行号。
> row.number <- c(1:7)
> a <- c(rep("A", 3), rep("B", 4))
> b <- c(rep(250,3), rep(80,4))
> df <-data.frame(row.number,a,b)
> df
row.number a b
1 1 A 250
2 2 A 250
3 3 A 250
4 4 B 80
5 5 B 80
6 6 B 80
7 7 B 80
现在,我想删除重复的行,只保留&#34;中间&#34;行。这对于总行数不均匀的组来说当然很简单,但对于总行数甚至不那么简单,其中显然没有&#34;中间&#34;行。在这里,我想保留上排,它位于&#34;中间&#34;结果应如下所示:
> row.number <- c(2,5)
> a <- c("A","B")
> b <- c(250,80)
> df_solution <- data.frame(row.number,a,b)
> df_solution
row.number a b
1 2 A 250
2 5 B 80
我试图编写一个ifelse函数,其中i)评估偶数/不均匀的总行数(nrow %% 2 == 0
),ii)即使那时候中间&#34;中间&#34;保留,iii)如果保持中间行不均匀。
使用这个post作为起点,我尝试了各种解决方案,但是我无法对步骤ii)的任何合理代码进行编码,即定义中间的上部相邻行以获得偶数的总行数。
非常感谢帮助!
答案 0 :(得分:0)
我们可以试试
# install.packages("data.table", dependencies = TRUE)
library(data.table)
setDT(df)[, if(.N >1) .SD[ceiling(.N/2)] else .SD ,a]
# a row.number b
#1: A 2 250
#2: B 5 80