R语言使用dplyr提取Microsoft365R返回嵌套数据框的指定字段
问题解决方法
根因说明
你遇到报错的核心原因是:SKA_student中的lastModifiedBy属于嵌套数据框列,控制台打印时显示的lastModifiedBy.user.email是为了方便阅读自动拼接的展示名称,并不是数据框中实际存在的列名,因此直接传入select()会触发列不存在的错误。
基于tidyverse(dplyr生态)的解决方案
方案1:使用tidyr::hoist直接提取指定嵌套字段(推荐)
hoist是tidyverse专门用于提取嵌套列中指定字段的函数,语法清晰,支持直接指定嵌套层级提取目标字段:
library(dplyr) library(tidyr) # 单独提取邮箱字段,生成新列名为email SKA_student %>% hoist(lastModifiedBy, email = c("user", "email"))
如果需要把lastModifiedBy下的所有子字段全部展平为普通列,可以使用unnest_wider:
# 两层嵌套全部展平,之后可以直接用select提取任意子字段 SKA_student %>% unnest_wider(lastModifiedBy) %>% unnest_wider(user)
方案2:仅使用dplyr实现提取
如果不想额外加载tidyr包,仅用dplyr的语法也可以实现需求:
SKA_student %>% mutate(lastModifiedBy.user.email = .$lastModifiedBy$user$email) %>% select(lastModifiedBy.user.email)
方案3:仅需获取字段值不需要保留数据框结构
如果只需要拿到邮箱的取值,不需要保留在数据框中,可以直接嵌套pull:
SKA_student %>% pull(lastModifiedBy) %>% pull(user) %>% pull(email)
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

