R:使用从座位到座位的n。张票创建座位号

时间:2018-06-26 15:02:24

标签: r loops rbind

R:我有一个数据集,其中包含票证信息:部分,行,座位从,座位到n。票证。我想使用座位从和座位到变量来创建座位号,这将为我的数据添加更多行。 例子

data:  event , section , row, seat from , seat to, price, n.tickets
         1,       A,      10,    6,         8,      120,    3
mydata: event , section , row, seat number price, n.tickets
         1,       A,      10,    6,          120,    3
         1,       A,      10,    7,          120,    3
         1,       A,      10,    8,          120,    3

Mydata是我要创建的一个。我在R中厌倦了rbind命令,但失败了。我不知道是否需要循环。 任何帮助深表感谢!

2 个答案:

答案 0 :(得分:0)

使用基数R可以执行类似的操作

do.call("rbind", lapply(split(dd, 1:nrow(dd)), function(x) {
  data.frame(dd[1:3], seat=dd[1,4]:dd[1,5], dd[6:7])
}))

经过测试

dd <- read.csv(text="event , section , row, seat from , seat to, price, n.tickets
1,       A,      10,    6,         8,      120,    3")

在这里,我们将data.frame按行拆分,然后通过扩展座位号创建一个新的data.frame,然后将所有data.frame与do.call("rbind",...")

合并在一起

答案 1 :(得分:0)

替代:

dd <- read.csv(text="event , section , row, seat from , seat to, price, n.tickets
1,       A,      10,    6,         8,      120,    3")

seats = dd$seat.from:dd$seat.to
dd[seq_along(seats),] <- dd[1,]
dd %>% dplyr::select(-one_of("seat.from","seat.to")) %>% mutate(seats = seats)

#  event  section row price n.tickets seats
#1     1        A  10   120         3     6
#2     1        A  10   120         3     7
#3     1        A  10   120         3     8