微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除每组的数量或行数大于 r 中分组数据框的值的行

如何解决删除每组的数量或行数大于 r 中分组数据框的值的行

我想删除 ID 号大于长度值的所有行。

Tracks <- c("a","a","b","c","c")
Length <- c(2,2,1,2)
ID <- c(1,3,4,2)
df <- data.frame(Tracks,Length,ID)

  Tracks Length ID
1      a      2  1
2      a      2  2
3      a      2  3
4      b      1  1
5      b      1  2
6      b      1  3
7      b      1  4
8      c      2  1
9      c      2  2

我使用dplyr包的group_by对我的数据进行分组,打印显示分组成功

df_group <- df %>% group_by(Tracks)
> print(df_group)
# A tibble: 9 x 3
# Groups:   Tracks [3]
  Tracks Length    ID
  <chr>   <dbl> <dbl>
1 a           2     1
2 a           2     2
3 a           2     3
4 b           1     1
5 b           1     2
6 b           1     3
7 b           1     4
8 c           2     1
9 c           2     2

我尝试使用 head 函数,因为这应该会给我最好的结果。为此,我想用一个函数来定义 n=,该函数返回每个组的长度的最大值

df2 <- head(df_group,n = max(df$Length))
print(df2)
# A tibble: 2 x 3
# Groups:   Tracks [1]
  Tracks Length    ID
  <chr>   <dbl> <dbl>
1 a           2     1
2 a           2     2

group_modify(df_group,head(df_group,n = max(df$Length)),.keep = TRUE)
Error: Can't convert a `grouped_df/tbl_df/tbl/data.frame` object to function

似乎 head 函数不适用于组,因为它只返回前两行,我尝试使用 group_modify ,但这也不起作用。

有什么想法可以做到这一点吗?

解决方法

试试subset

subset(
  df,ID <= Length
)

哪个会给

  Tracks Length ID
1      a      2  1
2      a      2  2
4      b      1  1
8      c      2  1
9      c      2  2
,
df_filtered <- df[df$ID <= df$Length,]

这应该可以完成工作。您始终可以以 df[rows,columns] 格式从 data.frame 中选择行和列。在这种情况下,逗号后面的空格仅表示“获取所有列”。

,

您可以使用 slice 做到这一点:

library(dplyr)

df %>%  group_by(Tracks) %>% slice(seq_len(max(Length))) %>% ungroup

#  Tracks Length    ID
#  <chr>   <dbl> <dbl>
#1 a           2     1
#2 a           2     2
#3 b           1     1
#4 c           2     1
#5 c           2     2

filter

df %>%  group_by(Tracks) %>% filter(ID <= max(Length)) %>% ungroup
,

除了现有的非常好的解决方案之外,还可以使用 which:我知道逻辑索引是此答案的一部分(由 David 提供)。

df1 <- df[which(!ID > Length),]

output:
> df1
  Tracks Length ID
1      a      2  1
2      a      2  2
4      b      1  1
8      c      2  1
9      c      2  2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?