Найдите самую большую пару из двух столбцов, сохраняя при этом фрейм данных неповрежденным

У меня есть кадр данных, в котором я хочу найти самые большие пары на основе двух столбцов. Однако, когда я группирую кадр данных, незначительные изменения в других столбцах влияют на мой результат.

Позвольте мне сказать вам:

library(plyr)

usercsv_data <- data.frame(id_str = c("89797", "12387231231", "1234823432", "3483487344", "89797", "1234823432"),
                           screen_name = c("A", "B", "C", "D", "A", "C"),
                           location = c("FL", "CO", "NYC", "MI", "FL", "NYC"),
                           verified = c("Y", "N", "N", "Y", "N", "Y"),
                           created = c("Sun", "Mon", "Tue", "Sun", "Tue", "Fri"),
                           friends_count = c(1,2,5,787,7, 5),
                           followers_count= c(2,4,6,897,4,3))

#         id_str screen_name location verified created friends_count followers_count
# 1       89797           A       FL        Y     Sun             1               2
# 2 12387231231           B       CO        N     Mon             2               4
# 3  1234823432           C      NYC        N     Tue             5               6
# 4  3483487344           D       MI        Y     Sun           787             897
# 5       89797           A       FL        N     Tue             7               4
# 6  1234823432           C      NYC        Y     Fri             5               3


#This gets me the max pairs when the groups variable are unique
plyr::ddply(usercsv_data,.(id_str,screen_name),numcolwise(max))

#         id_str screen_name friends_count followers_count
# 1  1234823432           C             5               6
# 2 12387231231           B             2               4
# 3  3483487344           D           787             897
# 4       89797           A             7               4


#BUT, when I want to do same technique with whole dataframe, I get same dataframe
plyr::ddply(usercsv_data,.(id_str,screen_name, location,verified,created),numcolwise(max))

#         id_str screen_name location verified created friends_count followers_count
# 1  1234823432           C      NYC        N     Tue             5               6
# 2  1234823432           C      NYC        Y     Fri             5               3
# 3 12387231231           B       CO        N     Mon             2               4
# 4  3483487344           D       MI        Y     Sun           787             897
# 5       89797           A       FL        N     Tue             7               4
# 6       89797           A       FL        Y     Sun             1               2

Но я хотел что-то вроде этого-

#         id_str screen_name location verified created friends_count followers_count
# 1  1234823432           C      NYC        N     Tue             5               6
# 3 12387231231           B       CO        N     Mon             2               4
# 4  3483487344           D       MI        Y     Sun           787             897
# 5       89797           A       FL        N     Tue             7               4

Как я могу сгруппировать, чтобы сохранить все столбцы, но сохранить только строки, в которых существуют самые большие пары? В настоящее время, когда есть больше групповых переменных, он сохраняет уникальные (как и должно быть), но не имеет достаточных знаний, заставляя меня искать вопросы.


person CaseebRamos    schedule 22.09.2020    source источник
comment
Привет @RonakShah, обновил мой вопрос. Все остальные значения в кадре данных будут связаны с самой высокой парой в столбцах friends_count и followers_count. Я хочу только по существу сгруппировать screen_name и найти строки с наибольшей комбинацией из столбцов counts. Таким образом, остальные находятся в рядах, где преобладают эти самые большие ценности.   -  person CaseebRamos    schedule 22.09.2020
comment
Давайте продолжим обсуждение в чате.   -  person CaseebRamos    schedule 22.09.2020


Ответы (1)


plyr был упразднен, поэтому мы можем использовать здесь dplyr, создав столбец, представляющий собой сумму friends_count и followers_count, а затем выбрав максимальную строку для каждого id_str и screen_name.

library(dplyr)

usercsv_data %>%
    mutate(max = rowSums(select(., friends_count, followers_count))) %>%
    group_by(id_str, screen_name) %>%
    slice(which.max(max))

Или без создания столбца max.

usercsv_data %>%
  group_by(id_str, screen_name) %>%
  slice(which.max(friends_count + followers_count))

#  id_str      screen_name location verified created friends_count followers_count
#  <chr>       <chr>       <chr>    <chr>    <chr>           <dbl>           <dbl>
#1 1234823432  C           NYC      N        Tue                 5               6
#2 12387231231 B           CO       N        Mon                 2               4
#3 3483487344  D           MI       Y        Sun               787             897
#4 89797       A           FL       N        Tue                 7               4
person Ronak Shah    schedule 22.09.2020