1

我正在使用package的get_friends功能来获取一组从 Twitter 话语中的参与者中抽取的焦点用户的朋友列表。该函数返回一个小标题列表。rtweetuser_id

每个 tibble 有两列 - 一列是焦点用户的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 访问的用户。我想确保我只删除那些无法访问或不存在的人。请帮忙。

4

2 回答 2

2

嗨,您可以使用包中的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
于 2019-04-09T09:40:26.477 回答
1

我们可以使用Filterwith nrow,它将删除所有行数为 0 的条目,即

Filter(nrow, userFriends)
于 2019-04-09T09:54:56.623 回答