r - 不同行长的数据框
问题描述
我有一个包含 2 列的数据框 A,即“金额”和“次数”。我想创建一个新的数据框 B,它根据“次数”在数据框 A 中重复“金额”。例如,如果数据帧 A 中的第一行的“金额”=50 和“次数”=4,第二行的“金额”=80 和“次数”=2,我想创建一个新的数据帧B如下图:
50 50 50 50
80 80
因此,数据帧 B 的行将具有不同的长度。请帮忙!
解决方案
这是一种使用方法apply
:
A <- data.frame(Amount = c(50, 80), Times = c(4, 2))
# Amount Times
# 1 50 4
# 2 80 2
x <- apply(A, 1, function(r) {
c(rep(r[['Amount']], r['Times']), rep(NA, max(A['Times'] - r['Times'])))
})
t(x)
# [,1] [,2] [,3] [,4]
# [1,] 50 50 50 50
# [2,] 80 80 NA NA
这是一个稍微不那么罗嗦的替代方案:
> do.call(rbind, lapply(mapply(rep, A$Amount, A$Times), `length<-`, max(A$Times)))
[,1] [,2] [,3] [,4]
[1,] 50 50 50 50
[2,] 80 80 NA NA
推荐阅读
- c# - 如何在没有 ViewBag 的情况下将值从 Controller 传递到 _Layout 并进一步传递到 PartialView?
- embedded-linux - 在 Debian 9.5 内核 4.14-ti 上为 BeagleBone Black 启用设备树覆盖
- reactjs - 与 GraphQL 客户端反应
- angular - SpringBoot2 + Spring security CORS OPTIONS方法返回401代码
- python - 将 Series 作为特定索引处的新列附加到 DataFrame
- icalendar - 如何使用 RRULE 部件来实现“每月两次”?
- python - 在父路径导入模块
- curl - 需要帮助将 curl API 请求转换为 Google APP Script UrlFetchApp 请求
- java - 如何启动不同的计时器
- javascript - Onclick() 函数在警报窗口上显示选定的选项