#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