Как может фрейм данных, содержащий список векторов, иметь разную длину, если не указан в списке? - PullRequest
1 голос
/ 06 февраля 2020

Учитывая фрейм данных длиной n, я запустил функцию применения и назначил результат новому столбцу на фрейме данных:

my_df$index <- sapply(my_df$local_db_uuid,function(x) which(my_df$remote_db_uuid== x))

Однако я заметил следующее:

join_ref_id_complete$index %>% length()
# returns length of dataframe rows

В сравнении:

join_ref_id_complete$index %>% unlist() %>% length()
# returns less than length of dataframe rows

Что здесь происходит с длиной? Это пропущенные значения?

1 Ответ

1 голос
/ 06 февраля 2020

Возможно, что некоторые элементы list не имеют совпадения и возвращают integer(0), который сбрасывается при unlist инг. Используя простой пример

lst1 <- list(c(5, 0), c(3, 2, 4), 5)
sapply(lst1, function(x) which(x == 5))
#[[1]]
#[1] 1

#[[2]]
#integer(0)

#[[3]]
#[1] 1

, когда мы unlist, второй элемент отбрасывается

unlist(sapply(lst1, function(x) which(x == 5)))
#[1] 1 1

, возвращая length из 2 вместо 3

Но Это просто совпадение, что длина меньше. Это может быть больше задницы хорошо

lst1 <- list(c(5, 0, 5, 5), c(3, 2, 4), c(5, 3, 5))
unlist(sapply(lst1, function(x) which(x == 5)))
#[1] 1 3 4 1 3

Здесь length равно 5, то есть больше, чем length из list. Это также может быть равным просто по совпадению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...