rbind tbl和df给出了过滤器的错误

R N*_*oob 7 r filter rbind dplyr

我正在使用dplyr和爱它,但发现了一种奇怪的行为.我正在清理来自不同来源的一些数据并将它们放在一个数据框中.部分需要更多清洁,完成dplyr并产生一个tbl物体.另一部分更简单,我有一个data.frame对象.我rbind他们在一起,当我做分析时,尝试使用dplyr过滤功能,它将无法正常工作.例:

df1 <- data.frame(
   group = factor(rep(c("C", "G"), 5)),
   value = 1:10)
df1 <- df1 %>% group_by(group) #df1 is now tbl
df2 <- data.frame(
   group = factor(rep("G", 10)),
   value = 11:20)
df3 <- rbind(df1, df2) #df2 is data.frame
df3 %>% filter(group == "C") #returns filtered rows in df1 and all rows of df2
Source: local data frame [15 x 2]
Groups: group

  group value
1      C     1
2      C     3
3      C     5
4      C     7
5      C     9
6      G    11
7      G    12
8      G    13
9      G    14
10     G    15
11     G    16
12     G    17
13     G    18
14     G    19
15     G    20
Run Code Online (Sandbox Code Playgroud)

如果我这样做df3[df3$group == "C", ],它可以正常工作.错误?

小智 0

这是因为当您在 df1 上使用 group_by 时,它的结构会发生变化,并且会按组对其执行操作。当你执行 rbind 时

df3 <- rbind(df1, df2) 
Run Code Online (Sandbox Code Playgroud)

R 尝试创建与第一个参数(即 df1)具有相同结构的 df3,但由于 df1 和 df2 是不同类型的数据帧,因此当您应用过滤器时,它仅在 df1 上应用 groupwose 并导致不稳定的输出。

如果你检查

df3<-rbind(df2,df1)
Run Code Online (Sandbox Code Playgroud)

df3 是一个没有组的普通数据帧,并给出正确的输出。