gpt4 book ai didi

重复一条记录N次,创建一个从1到N的新序列

转载 作者:行者123 更新时间:2023-12-02 06:29:05 26 4
gpt4 key购买 nike

我想将 data.frame 的行重复 N 次。这里 N 是根据 data.frame 的每一行中第一列和第二列的值之间的差异来计算的。在这里,我遇到了 N 的问题。特别是,N 可能每行都发生变化。我需要通过增加 K 创建从第 1 行中的第一个值到第二个值的序列来创建一个新列。这里 K 对所有行保持不变。

Ex: d1<-data.frame(A=c(2,4,6,8,1),B=c(8,6,7,8,10))

在上面的数据集中,有 5 行。第一行中第一个值和第二个值之间的差异是 7。现在我需要将第一行复制 7 次,并且需要创建一个序列为 2、3、4、5、6、7 和 8 的新列。

我可以使用以下代码创建数据集。

dist<-1
rec_len<-c()
seqe<-c()
for(i in 1:nrow(d1))
{
a<-seq(d1[i,"A"],d1[i,"B"],by=dist)
rec_len<-c(rec_len,length(a))
seqe<-c(seqe,a)
}
d1$C<-rec_len

d1<-d1[rep(1:nrow(d1),d1$C),]
d1$D<-seqe
row.names(d1)<-NULL

但是需要很长时间。有没有可能加快这个过程?

最佳答案

data.table 方法可以使用 1:nrow(df) 作为分组变量来进行按行操作来创建包含 A 序列的列表和 B,然后取消列出,即

library(data.table)

setDT(d1)[, C := B - A + 1][,
D := list(list(seq(A, B))), by = 1:nrow(d1)][,
lapply(.SD, unlist), by = 1:nrow(d1)][,
nrow := NULL][]

这给了,

   A  B  C  D
1: 2 8 7 2
2: 2 8 7 3
3: 2 8 7 4
4: 2 8 7 5
5: 2 8 7 6
6: 2 8 7 7
7: 2 8 7 8
8: 4 6 3 4
9: 4 6 3 5
10: 4 6 3 6
11: 6 7 2 6
12: 6 7 2 7
13: 8 8 1 8
14: 1 10 10 1
15: 1 10 10 2
16: 1 10 10 3
17: 1 10 10 4
18: 1 10 10 5
19: 1 10 10 6
20: 1 10 10 7
21: 1 10 10 8
22: 1 10 10 9
23: 1 10 10 10
A B C D

注意您可以轻松地在seq中更改K,即

setDT(d1)[, C := B - A + 1][, 
D := list(list(seq(A, B, by = 0.2))), by = 1:nrow(d1)][,
lapply(.SD, unlist), by = 1:nrow(d1)][,
nrow := NULL][]

关于重复一条记录N次,创建一个从1到N的新序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com