2014-09-18 1 views
7

dplyr을 사용하고 있는데 사랑 스럽지만 이상한 행동을 발견했습니다. 다른 소스의 일부 데이터를 정리하고 데이터 프레임에 모으는 중입니다. 그 중 일부는 dplyr과 함께 더 많은 청소가 필요하고 tbl 개체가되었습니다. 다른 부분은 더 간단했고, 나는 data.frame 개체를 가졌습니다. 나는 rbind을 함께 사용하고, 분석 할 때 dplyr 필터 기능을 사용하려고하면 제대로 작동하지 않습니다. 예 :rbind tbl 및 df가 필터를 사용하여 오류를 발생시킵니다.

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", ] 일 경우 제대로 작동합니다. 곤충?

+1

'df3 %> % ungroup() %> % 필터 (그룹 == "C")'또는'as.data.frame (df3) %> % 필터 (그룹 == "C")'를 시도하십시오. – akrun

+0

@akrun 예, 둘 다 작동합니다! –

+0

'df3 <- rbind (d1, as.tbl (df2))'결과가 같은 문제이므로 'df2'가 데이터 프레임이 아닙니다. – Henrik

답변

0

df1에서 group_by를 사용하면 구조가 변경되고 작업이 그룹별로 수행되기 때문입니다. 당신이 rbind을 수행 할 때

df3 <- rbind(df1, df2) 

R은 처음 aregument 즉 DF1의로하지만, DF1 때문에 동일한 구조로 DF3를 만들려고하고 당신은 단지에 적용되는 필터를 groupwose를 적용 할 때 DF2는 dataframes의 다른 종류 df1이되어 이상한 결과가 나옵니다. 당신이

df3<-rbind(df2,df1) 

DF3을 선택하면

그룹이없는 정상 dataframe하고 정확한 출력을 제공합니다. 당신이 행을 삭제해야

0

'< DF1 - DF1 %> % GROUP_BY (그룹) #의 DF1 지금 TBL는'당신이 tbl_df에 data.frame을 변경하려면

, 당신은 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 
관련 문제