#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)