R-Reprex中带条件语句的重复名字过滤

lymgl2op  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个大型数据库,其中有部分重复的行,我尝试在dplyr中使用条件语句过滤器来删除这些部分重复的行。

**目标:**我希望删除所有包含重复的a1和id1组合且var1等于0的行。为了实现这一点,我尝试在筛选函数中使用duplicated()调用沿着条件语句。
**问题:**下面我使用的代码似乎忽略了var1等于零的最后一个条件。我尝试了两种不同的过滤方法来获得所需的结果,但都无济于事。我的duplicated()调用有什么问题吗?我应该使用distinct()吗?

library(dplyr)
a1 <- c('adam', 'adam', 'adam', 'megan', 'megan', 'megan', 'jen', 'jen', 'jen')
id1 <- c('a', 'a', 'b', 'a', 'b', 'b', 'a', 'b', 'c')
var1 <- as.numeric(c('0', '3.2', '3', '2.2', '1.1', '0', '1.2', '2.4','3.1'))
test_df <- data.frame(a1, id1, var1)

#code to get rid of duplicates
test_df2 <- test_df %>%
  filter(!(duplicated(id1) & duplicated(a1) & var1 == 0))

#alternative code
test_df3 <- test_df
test_df3$new_id <- with(test_df3, paste0(a1, sep = "-", id1))

test_df3 <- test_df3 %>%
  filter(!(duplicated(new_id) & var1 == 0))

这是我得到的一张照片:

以下是所需的结果:

sgtfey8w

sgtfey8w1#

我们可以使用group_bysummarise

librar(dplyr)
test_df %>% 
  group_by(a1, id1) %>% 
  summarise(var1 = sum(var1))
a1    id1    var1
  <chr> <chr> <dbl>
1 adam  a       3.2
2 adam  b       3  
3 jen   a       1.2
4 jen   b       2.4
5 jen   c       3.1
6 megan a       2.2
7 megan b       1.1

相关问题