首页 > 解决方案 > 不同行长的数据框

问题描述

我有一个包含 2 列的数据框 A,即“金额”和“次数”。我想创建一个新的数据框 B,它根据“次数”在数据框 A 中重复“金额”。例如,如果数据帧 A 中的第一行的“金额”=50 和“次数”=4,第二行的“金额”=80 和“次数”=2,我想创建一个新的数据帧B如下图:

50  50  50  50
80  80

因此,数据帧 B 的行将具有不同的长度。请帮忙!

标签: r

解决方案


这是一种使用方法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

推荐阅读