选择"中"来自数据框的行甚至总行数

时间:2016-01-22 18:06:04

标签: r

我有一个数据框,其中包含两列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)的任何合理代码进行编码,即定义中间的上部相邻行以获得偶数的总行数。

非常感谢帮助!

1 个答案:

答案 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