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

如何还原制表后的data.frame?使用DescTools::Lambda遇rep报错求助

按计数列还原因子组合表格的正确方法

你有一个包含因子组合及对应计数的data.frame:

z <- data.frame(a=factor(c("x","x","x","y","y","y")),
                b=factor(c("a","b","c","a","b","c")),
                count=c(2,5,1,4,5,1))

直接执行rep(z[,1:2], z$count)会报错,原因是rep处理data.frame时默认按列重复,无法接受向量形式的times参数实现按行重复。

以下是几种可行的解决方案:

  • 基础R实现:通过行索引重复
    利用行索引向量实现按行重复,是最直接的基础R写法:
z_expanded <- z[rep(seq_len(nrow(z)), z$count), 1:2]

seq_len(nrow(z))生成每行的位置索引,rep根据count列的值重复对应索引,最后按索引提取行即可得到展开后的因子组合表格。

  • tidyverse工具:tidyr::uncount
    如果使用tidyverse生态,tidyr::uncount专门处理频数展开需求,代码更简洁:
library(tidyr)
z_expanded <- uncount(z, count) %>% select(a, b)

uncount自动按count列的值重复每行,select(a, b)用来只保留需要的因子列。

  • DescTools内置方案:Expand.table
    既然你要使用DescTools::Lambda,可以直接用同包的Expand.table函数——它就是为将频数表还原为原始观测表设计的:
library(DescTools)
z_expanded <- Expand.table(z, freq = "count") %>% select(a, b)

该方法无需额外依赖其他包,和你后续要使用的Lambda函数兼容性更好。

验证展开结果的前几行:

head(z_expanded)

输出符合预期:

a b
1 x a
2 x a
3 x b
4 x b
5 x b
6 x b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:12:10