You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame单列转置为多行并保留uId?

解决方法:用tidyverse拆分并展开列表列

这问题我太熟啦!咱们可以用R的tidyverse工具链轻松搞定,既安全又直观,给你两种方案选:

方案一:纯字符串处理(更安全,避免代码解析风险)

如果不确定favs列的字符串是否是完全安全的R代码,推荐用这种纯字符串操作的方法来拆分内容:

首先先构造你的示例数据:

library(tidyverse)

# 模拟你的原始DataFrame
df <- tibble(
  uId = c(1000, 1001, 1002, 1003),
  favs = c("c('pizza')", "c('seafood','steaks')", NA, "c('sushi','strawberries')")
)

然后执行处理步骤:

df_processed <- df %>%
  mutate(
    # 单独处理NA值,转成包含NA的列表
    favs = case_when(
      is.na(favs) ~ list(NA_character_),
      TRUE ~ str_remove_all(favs, "^c\\('|'\\)$") %>%  # 去掉首尾的c('和')
               str_split("','") %>%                   # 按','分割成多个元素
               map(str_trim)                          # 清理每个元素的多余空格
    )
  ) %>%
  unnest(favs)  # 把列表列展开成多行

方案二:解析R代码(更简洁,适合确定内容安全的场景)

如果能确定favs列的c(...)字符串都是合法且安全的R代码,直接用代码解析的方法会更简洁:

df_processed <- df %>%
  mutate(
    favs = case_when(
      is.na(favs) ~ list(NA_character_),
      TRUE ~ map(favs, ~ eval(parse(text = .x)))  # 把字符串解析成R向量
    )
  ) %>%
  unnest(favs)

最终输出结果

两种方法运行后,都会得到你想要的格式:

uIdfavs
1000pizza
1001seafood
1001steaks
1002NA
1003sushi
1003strawberries

如果你的原始数据量很大,tidyverse的方法效率也足够应付,放心用就好!

内容的提问来源于stack exchange,提问作者ScottP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:01:39