【发布时间】:2014-11-13 05:20:36
【问题描述】:
我正在使用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
如果我使用df3[df3$group == "C", ],它可以正常工作。错误?
【问题讨论】:
-
试试
df3 %>% ungroup() %>% filter(group=="C")或as.data.frame(df3) %>% filter(group=="C")。 -
@akrun 是的,这两个都有效!
-
df3 <- rbind(d1, as.tbl(df2))会导致同样的问题,因此这与 'df2' 不是数据框有关。 -
df3 <- rbind(df2, df1)(切换顺序)也可以。rbind(df1, df2)返回grouped_dt,内部结构混乱。检查str(df3)。 -
看起来使用 dplyr 中的
rbind_list而不是rbind有效(无论顺序如何,都会产生一个 data.frame)。