我正在使用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", ]
,它可以正常工作。错误?
答案 0 :(得分:0)
这是因为当你在df1上使用group_by时,它的结构会发生变化,并且会逐组执行操作。当你做rbind
df3 <- rbind(df1, df2)
R尝试使用与第一个参数相同的结构创建df3,即df1,但由于df1和df2是不同类型的数据帧,因此当应用过滤器时,仅应用于df1上的groupwose并导致不稳定的输出。
如果你检查
df3<-rbind(df2,df1)
df3是没有组的正常数据帧,并提供正确的输出。
答案 1 :(得分:0)
你应该删除行'df1&lt; - df1%&gt;%group_by(group)#df1现在是tbl'
如果你想将data.frame更改为tbl_df,你应该使用
df1<-tbl_df(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