Как удалить пустые фрагменты из списка фрагментов, возвращаемых функцией get_friends?

#r #list #tibble #rtweet

#r #Список #tibble #rtweet

Вопрос:

Я использую get_friends функцию rtweet package, чтобы получить список user_id друзей набора основных пользователей, которые отобраны из участников обсуждения в Twitter. Функция возвращает список фрагментов.

В каждом tibble есть два столбца — в одном указано имя пользователя focus user_id , а во втором — user_id имена друзей пользователей focus. Поскольку у каждого пользователя разное количество друзей, количество строк в каждом tibble разное.

Моя проблема: учетные записи некоторых пользователей focus теперь не существуют по неизвестным причинам. Из-за этого в списке есть пустые фрагменты, которые выглядят следующим образом:

 > userFriends[[88]]
# A tibble: 0 x 0
  

Непустой tibble выглядит следующим образом:

 > userFriends[2]
[[1]]
# A tibble: 32 x 2
                 user            user_id
                <chr>              <chr>
 1 777937999917096960           49510236
 2 777937999917096960           60489018
 3 777937999917096960         3190203961
 4 777937999917096960          118756393
 5 777937999917096960         2338104343
 6 777937999917096960          122453931
 7 777937999917096960          452830010
 8 777937999917096960           60937837
 9 777937999917096960 923106269761851392
10 777937999917096960          416882361
# ... with 22 more rows
  

Я хочу, чтобы мой код идентифицировал эти пустые фрагменты и подмножество списка без этих фрагментов.

Я использовал nrow функцию для этих tibbles, чтобы найти количество друзей, которые были у каждого пользователя focus.

 nFriends <- as.numeric(lapply(userFriends, nrow))
  

Я взял индексы, где это значение равно нулю, в качестве пустых tibbles и удалил их, используя метод подмножества следующим образом:

 nullIndex <- nFriends!=0
userFriendsFinal <- userFriends[nullIndex]
  

Похоже, на данный момент это работает. Но таким образом я также удаляю пользователей с нулевыми друзьями (хотя это маловероятно) вместе с пользователями, которые больше не существуют или доступны через API. Я хочу убедиться, что удаляю только те, которые недоступны или не существуют.
Пожалуйста, помогите.

Ответ №1:

Привет, вы можете использовать discard функцию из purrr пакета:

Вот небольшой пример:

 library(purrr)
mylist <- list( a = tibble(n = numeric()),
      b = tibble(n = 1:4))
discard(mylist, function(z) nrow(z) == 0)
$b
# A tibble: 4 x 1
      n
  <int>
1     1
2     2
3     3
4     4
  

Ответ №2:

Мы можем использовать Filter with nrow , который удалит все записи с количеством строк 0, т.Е.

 Filter(nrow, userFriends)