Учитывая следующую структуру:
df <- structure(list(checkPointAdditionalData_ignorePermissions = list(
list("READ_EXTERNAL_STORAGE", "READ_CONTACTS", "READ_PHONE_STATE",
"WRITE_EXTERNAL_STORAGE", "ACCESS_FINE_LOCATION", "ACCESS_COARSE_LOCATION",
"READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE", "READ_CONTACTS",
"READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE", "ACCESS_FINE_LOCATION",
"ACCESS_COARSE_LOCATION", "READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE",
"READ_CONTACTS", "READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE",
"READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE", "READ_CONTACTS",
"READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE", "READ_CALL_LOG"),
list("READ_EXTERNAL_STORAGE", "READ_CONTACTS", "READ_PHONE_STATE",
"WRITE_EXTERNAL_STORAGE", "READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE",
"READ_CONTACTS", "READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE",
"READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE", "READ_CONTACTS",
"READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE", "READ_CALL_LOG"),
list("READ_EXTERNAL_STORAGE", "READ_CONTACTS", "READ_PHONE_STATE",
"WRITE_EXTERNAL_STORAGE", "READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE",
"READ_CONTACTS", "READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE",
"READ_CALL_LOG"), list("READ_EXTERNAL_STORAGE", "READ_CONTACTS",
"READ_PHONE_STATE", "WRITE_EXTERNAL_STORAGE", "READ_CALL_LOG")),
L_ignore_perm = c(7L, 7L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -10L))
Я хочу "привести в порядок" его, чтобы поместить все содержимое списков в виде дополнительных столбцов и дублировать его:
Желаемый результат:
READ_EXTERNAL_STORAGE READ_CONTACTS READ_PHONE_STATE
1 1 1
1 1 1
1 1 1
WRITE_EXTERNAL_STORAGE ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION
1 1 1
1 1 1
1 0 0
READ_CALL_LOG
1
1
1
и т. Д. Для каждой строки.
Посоветуйте, пожалуйста, как это сделать, я пытаюсь поиграть с tidyr
функциями.Я полностью понимаю, что поток должен составлять union
из всех возможных членов списков, добавлять их в качестве имен столбцов, применять ifelse
для каждого столбца, чтобы поставить 1/0
в качестве значения.
Не существуетфункция, которая делает это просто и эффективно?
Я уже сделал следующее:
df %>%
dplyr::select(checkPointAdditionalData_ignorePermissions) %>%
dplyr::mutate(L_ignore_perm = lengths(checkPointAdditionalData_ignorePermissions)) %>%
unnest(checkPointAdditionalData_ignorePermissions) %>%
dplyr::mutate(checkPointAdditionalData_ignorePermissions = unlist(checkPointAdditionalData_ignorePermissions))
и пробовал пакет dummies
.