r - dplyr 返回不会绑定到可比较数据帧的数据帧
问题描述
我意识到这里有其他方法可以得到结果,但我试图理解为什么在下面的代码中使用 rbind 会产生一个列表,而不是一个数据帧,尽管输入了两个明显相同的数据帧。大概与 dplyr 在 group_by 操作后返回的数据框对象有关,但是如何解决呢?
目的是删除 EventCode = X 的重复项(在 EventValue1 和 EventValue2 列上),但保留 EventCode = Y 的重复项。
df <- data.frame(EventID = c("1", "2", "3", "4", "5", "6", "7", "8", "9"),
EventValue1 = c("A", "A", "B", "C", "D", "E", "E", "F", "F"),
EventValue2 = c("AA", "AA", "BB", "CC", "DD", "EE", "FF", "FF", "FF"),
EventCode = c("X", "X", "X", "X", "X", "X", "X", "Y", "Y"))
# split df by event code
df.x <- subset(df, EventCode == "X")
df.y <- subset(df, EventCode == "Y")
# remove duplicates in df.x by EventValue1 and EventValue2
df.x.2 <- df.x %>%
group_by(EventValue1, EventValue2) %>%
slice(which.min(EventID))
# recombine dfs
df <- rbind(df.x.2, df.y) # this returns a list, should be a data frame
# desired outcome
# EventID EventValue1 EventValue2 EventCode
# 1 A AA X
# 3 B AA X
# 4 C AA X
# 5 D AA X
# 6 E AA X
# 7 E AA X
# 8 F FF Y
# 9 F FF Y
解决方案
由于您df.x.2
的分组依据为EventValue1
失败EventValue2
rbind
。如果你ungroup
的数据有效
library(dplyr)
rbind(df.x.2 %>% ungroup(), df.y)
# EventID EventValue1 EventValue2 EventCode
#* <fct> <fct> <fct> <fct>
#1 1 A AA X
#2 3 B BB X
#3 4 C CC X
#4 5 D DD X
#5 6 E EE X
#6 7 E FF X
#7 8 F FF Y
#8 9 F FF Y
或使用仍将保持分组的dplyr
特定bind_rows
bind_rows(df.x.2, df.y)
推荐阅读
- jsp - [java.lang.IllegalStateException: getOutputStream() 已经为此响应调用]
- svg - SVG中矩形的中心文本
- recursion - 从 inorder 和 preorder 创建 postorder
- pythonanywhere - 在 pythonanywhere 中的某个类下添加 if-else 语句时出现语法错误
- arm64 - 是否有适用于 ARM64 架构的 Rapids 版本?
- openssl - 无法将 openssl rsa .pem 转换为 jks,出现 NullPointerException
- elixir - Phoenix + ExUnit:我应该在哪里定义全局助手?
- python - 运行 celery 组:两个任务并行运行以获取结果以产生第三个结果
- r - X 怎么可能同时像一个向量和一个具体变量一样(R)?
- android - 安卓通知不起作用它不返回任何错误