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

如何嵌套tibble?基于hand列嵌套dataframe遇问题求助

嘿,我来帮你搞定这个嵌套的问题~

首先,你遇到的问题和警告其实是因为新版tidyr里的nest()函数语法有变化,而且你没有指定分组依据:

  • 直接写nest(hand)的时候,函数会默认把每一行的hand单独嵌套成一个小tibble,所以得到了6行结果;
  • 警告信息提示你需要给嵌套的列命名,比如data = c(hand),但这还不是你要的“一行数据”的核心问题——核心是你需要先按hand列分组,因为你所有的hand值都是相同的,分组后就只有一个组,嵌套后自然就是一行啦。

正确的方法一(按hand分组嵌套,保留其他数据)

这应该是最符合你需求的写法:先通过group_by(hand)把所有行归为一组,再用nest()把其他列嵌套到一个列表列里,结果就是一行数据:

library(dplyr)
library(tidyr)

players %>%
  group_by(hand) %>%
  nest()

执行后会得到这样的结果:

# A tibble: 1 x 2
  hand           data             
  <chr>          <list>          
1 218755078355   <tibble [6 x 4]>

这里的data列是一个包含原始数据中seat、jugador、stack、posicion所有行的tibble,完全符合你“基于hand列嵌套得到一行”的需求。

如果你想让hand列本身是一个向量(包含所有6个值)

要是你的目标是让hand列变成一个长度为6的向量(哪怕里面的值都重复),同时其他列也保留为向量,那可以用summarize()结合list()来实现:

players %>%
  summarize(across(everything(), list), .groups = "drop")

这个代码会生成一行数据,每个列都是对应原始列所有值组成的向量,比如hand列就是c("218755078355", "218755078355", ...)(重复6次)。

再解释下警告信息

你看到的Warning message: All elements of ... must be named. Did you want data = c(hand)?是因为新版tidyr要求nest()的参数必须是“命名的列集合”,比如nest(hand_data = hand),但如果不分组的话,这个写法还是会生成6行,所以分组才是解决你问题的关键~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:37:44