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

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

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

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

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

Непустой тиббл выглядит так:

> 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 на этих рисунках, чтобы найти количество друзей, которых имел каждый фокусный пользователь.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Привет, вы можете использовать функцию 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
1 голос
/ 09 апреля 2019

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

Filter(nrow, userFriends)
...