如何在R中用Mongolite更新MongoDB中tibble列的行
解决嵌套tibble添加行的问题
你的问题出在误用了MongoDB的更新语法,而你的数据结构是R中的tibble,需要用R的dplyr和purrr工具来处理嵌套的列表列。
下面是两种可行的解决方案:
方法一:使用mutate+map批量处理
通过mutate遍历每一行,判断是否为目标用户,对其main_page中的tibble添加新行:
library(dplyr) library(purrr) df_updated <- df %>% mutate(main_page = map(main_page, ~{ if (cur_data()$user == "pascal") { # 给目标用户的main_page添加新行 bind_rows(.x, tibble(viz = "Bounce Rate", ids = "g", df = "ga")) } else { # 其他用户保持原数据不变 .x } }))
方法二:过滤目标行修改后合并
先筛选出目标用户的行,修改其main_page后再合并回原数据框:
library(dplyr) library(purrr) # 提取并修改目标用户的行 target_row <- df %>% filter(user == "pascal") %>% mutate(main_page = map(main_page, ~bind_rows(.x, tibble(viz = "Bounce Rate", ids = "g", df = "ga")))) # 合并回原数据(保留非目标用户的行) df_updated <- df %>% filter(user != "pascal") %>% bind_rows(target_row)
关键说明
- 你的
main_page是列表列,每个元素都是独立的tibble,所以需要用map来逐个操作这些嵌套的tibble。 bind_rows是R中用于给tibble添加行的标准函数,对应你想要的"添加一行"操作。
内容的提问来源于stack exchange,提问作者Pascal Schmidt
相关产品推荐
相关产品推荐

