rbind tbl和df给出滤波器的错误
我正在使用dplyr,并且很喜欢它,但是发现了一个奇怪的行为。我正在清理来自不同来源的一些数据,并将它们放在一个数据框中。它的一部分需要更多的清洁,使用rbind tbl和df给出滤波器的错误,r,filter,dplyr,rbind,R,Filter,Dplyr,Rbind,我正在使用dplyr,并且很喜欢它,但是发现了一个奇怪的行为。我正在清理来自不同来源的一些数据,并将它们放在一个数据框中。它的一部分需要更多的清洁,使用dplyr完成,并产生tbl对象。另一部分更简单,我有一个data.frame对象。我rbind将它们放在一起,当我进行分析时,试图使用dplyr过滤功能,它无法正常工作。例如: df1 <- data.frame( group = factor(rep(c("C", "G"), 5)), value = 1:10) df1 &
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
df1这是因为当您在df1上使用group_by时,它的结构更改和操作是按组执行的。当你做rbind的时候
df3 <- rbind(df1, df2)
df3您应该删除行“df1%group#U by(group)#df1现在是tbl”
如果要将data.frame更改为tbl_df,应该使用
df1Trydf3%>%ungroup()%%>%filter(group==“C”)
或as.data.frame(df3)%%>%filter(group==“C”)
@akrun-yep,这两种方法都有效df3df3看起来像是使用dplyr中的rbind_列表
而不是rbind
工作(无论顺序如何,结果都是data.frame)。
df3<-rbind(df2,df1)
df1 <- data.frame(
group = factor(rep(c("C", "G"), 5)),
value = 1:10)
# df1 <- df1 %>% group_by(group) #df1 is now tbl
# df1<-tbl_df(df1)
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