dplyr возвращает фрейм данных, который не будет привязан к сопоставимому фрейму данных - PullRequest
0 голосов
/ 11 октября 2019

Я понимаю, что здесь есть альтернативные способы получить результат, но я пытаюсь понять, почему использование rbind в следующем коде приводит к списку, а не к фрейму данных, несмотря на ввод двух явно идентичных фреймов данных,Предположительно это относится к объекту фрейма данных, возвращаемому dplyr после операции group_by, но как это можно исправить?

Цель состоит в том, чтобы удалить дубликаты (в столбцах EventValue1 и EventValue2), где EventCode = X, но сохранить дубликаты для EventCode = Y.

df <- data.frame(EventID = c("1", "2", "3", "4", "5", "6", "7", "8", "9"),
                 EventValue1 = c("A", "A", "B", "C", "D", "E", "E", "F", "F"),
                 EventValue2 = c("AA", "AA", "BB", "CC", "DD", "EE", "FF", "FF", "FF"),
                 EventCode = c("X", "X", "X", "X", "X", "X", "X", "Y", "Y"))

# split df by event code
df.x <- subset(df, EventCode == "X")
df.y <- subset(df, EventCode == "Y") 

# remove duplicates in df.x by EventValue1 and EventValue2 
df.x.2 <- df.x %>% 
  group_by(EventValue1, EventValue2) %>%
  slice(which.min(EventID))

# recombine dfs
df <- rbind(df.x.2, df.y) # this returns a list, should be a data frame


# desired outcome

# EventID EventValue1 EventValue2 EventCode 
# 1       A           AA          X
# 3       B           AA          X
# 4       C           AA          X
# 5       D           AA          X
# 6       E           AA          X
# 7       E           AA          X
# 8       F           FF          Y
# 9       F           FF          Y



Ответы [ 2 ]

1 голос
/ 11 октября 2019

Так как ваш df.x.2 сгруппирован по EventValue1 и EventValue2 rbind не удается. Это работает, если вы ungroup данные

library(dplyr)
rbind(df.x.2 %>% ungroup(), df.y)

#  EventID EventValue1 EventValue2 EventCode
#* <fct>   <fct>       <fct>       <fct>    
#1 1       A           AA          X        
#2 3       B           BB          X        
#3 4       C           CC          X        
#4 5       D           DD          X        
#5 6       E           EE          X        
#6 7       E           FF          X        
#7 8       F           FF          Y        
#8 9       F           FF          Y        

или используете dplyr специфический bind_rows, который все еще сохранит группировку

bind_rows(df.x.2, df.y)
0 голосов
/ 11 октября 2019

Используйте bind_rows вместо rbind:

df <- bind_rows(df.x.2, df.y)
df

# A tibble: 8 x 4
# Groups:   EventValue1, EventValue2 [7]
  EventID EventValue1 EventValue2 EventCode
  <fct>   <fct>       <fct>       <fct>    
1 1       A           AA          X        
2 3       B           BB          X        
3 4       C           CC          X        
4 5       D           DD          X        
5 6       E           EE          X        
6 7       E           FF          X        
7 8       F           FF          Y        
8 9       F           FF          Y 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...