Как мне подсчитать количество объектов (списков) в векторе?

#r #dataframe

#r #фрейм данных

Вопрос:

У меня проблема с подсчетом объектов в векторе. Проблема в том, что у меня есть столбец с идентификаторами и столбец индикаторов (ответы с несколькими вариантами ответов). Чтобы справиться с множественным выбором, я поместил его в векторизованное значение. Вот пример, который выглядит, безусловно, как мои данные:

 structure(list(id = c("000c6", 
"0016c", "00194", 
"00221", "0026e", 
"002fa", "0032a", 
"00331", "004ea", 
"00616"), indicators = list(c("1", 
"0", "1", "0", "0", "1", "0", "1", "-1", "0", "0", "0", "0", 
"0", "0", "0", "1", "0", "0", "0", "0", "1", "0", "0", "0", "0", 
"0", "0", "-1", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"1", "1", "0", "0", "", "1", "0", "0", "0", "0", "0", "1", "1", 
"0", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", 
"1", "-1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "0", "-1", ""), c("", "0", 
"-1", "0", "0", "0", "0", "1", "0", "1", "1", "0", "-1", "0", 
"1", "0", "0", "0", "1", "0", "0"), c("", "1", "1", "1", "0", 
"0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", 
"1", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", "0", "1", 
"0", "0", "0", "0", "1", "0", "1", "0", "0", "0", "0", "", "", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "", "", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "", "", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "", "", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", ""), NULL, NULL, c("", "0", "-1", "0", "-1", "0", "-1", 
"-1", "1", "0", "-1", "1", "0", "0", "0", "0", "0", "0", "0", 
"1", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", "1", 
"0", "-1", "0", "-1", "0", "0", "-1", "0", "0", "1", "", "", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "-1", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "", "", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "", "", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", ""), c("1", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", ""), NULL, NULL, c("", "0", "1", "0", "1", "-1", "0", 
"0", "0", "1", "-1", "1", "-1", "0", "0", "1", "0", "-1", "0", 
"0", "0", "0", "-1", "0", "0", "1", "0", "0", "1", "0", "0", 
"1", "0", "-1", "0", "0", "-1", "0", "-1", "0", "0", "0", "", 
"", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "", "", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "", "", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "", "", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", ""))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-10L))
  

Я хочу подсчитать количество ячеек в indicators , где значения нет NULL . Как я могу это сделать? Основная трудность для меня заключается в том, что indicators столбец содержит векторы, а не одно значение.

Ответ №1:

Мы можем использовать lengths для получения длины каждого элемента в indicators столбце.

 lengths(df$indicators)
#[1]  86  21 215   0   0 172  43   0   0 215
  

Теперь мы можем подсчитать значения, которые больше 0.

 sum(lengths(df$indicators) > 0)
#[1] 6
  

Хотя здесь вам не нужен цикл, но вы можете использовать также использовать sapply с is.null :

 sum(!sapply(df$indicators, is.null))
  

Ответ №2:

Другой базовый параметр R, использующий

  • length Filter
 > length(Filter(length,df$indicators))
[1] 6
  
  • length Filter is.null
 > length(Filter(Negate(is.null),df$indicators))
[1] 6