我有一個從 Microsoft365R 回傳的資料幀:
SKA_student <- structure(list(name = "Computing SKA 2021-22.xlsx", size = 22266L,
lastModifiedBy =
structure(list(user =
structure(list(email = "[email protected]",
id = "8ae50289-d7af-4779-91dc-e4638421f422",
displayName = "Name, My"), class = "data.frame", row.names = c(NA, -1L))),
class = "data.frame", row.names = c(NA, -1L)),
fileSystemInfo = structure(list(
createdDateTime = "2021-09-08T16:03:38Z",
lastModifiedDateTime = "2021-09-16T00:09:04Z"), class = "data.frame", row.names = c(NA,-1L))), row.names = c(NA, -1L), class = "data.frame")
我可以lastModifiedBy通過以下方式回傳所有資料:
SKA_student %>% select(lastModifiedBy)
lastModifiedBy.user.email lastModifiedBy.user.id lastModifiedBy.user.displayName
1 my@email.com 8ae50289-d7af-4779-91dc-e4638421f422 Name, My
但是如果我想要lastModifiedBy串列中的特定專案,它不起作用,例如:
SKA_student %>% select(lastModifiedBy.user.email)
Error: Can't subset columns that don't exist.
x Column `lastModifiedBy.user.email` doesn't exist.
我可以通過 base 來解決這個問題,但真的很喜歡 dplyr 答案
uj5u.com熱心網友回復:
此功能允許您展平所有串列列(我很久以前就在 SO 上發現了這一點,但找不到原帖以表示感謝)
SO_flat_cols <- function(data) {
ListCols <- sapply(data, is.list)
cbind(data[!ListCols], t(apply(data[ListCols], 1, unlist)))
}
然后就可以隨意選擇了。
SO_flat_cols (SKA_student) %>%
select(lastModifiedBy.user.email)
或者,您可以通過遞回拉串列來結束
SKA_student %>%
pull(lastModifiedBy) %>%
pull(user) %>%
select(email)
uj5u.com熱心網友回復:
你可以用
library(dplyr)
library(tidyr)
SKA_student %>%
unnest_wider(lastModifiedBy) %>%
select(email)
這回傳
# A tibble: 1 x 1
email
<chr>
1 my@email.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343671.html
