gpt4 book ai didi

R:快速乘以data.frame(或其他数据结构)中的选定行

转载 作者:行者123 更新时间:2023-12-05 00:05:16 24 4
gpt4 key购买 nike

我有一个像这样的 data.frame 类型的对象,但更大:

> head(mydf)  
id1 id2 n
1 0 1032142 3
2 0 1072163 1
3 0 119323 2

我需要将 a1a1 列打印到文件中,每列都 n 次。这样我就可以得到这样的文件:

0 1032142  
0 1032142
0 1032142
0 1072163
0 119323
0 119323

我尝试了以下解决方案,但它们使用显式 for 循环并且速度非常慢(用我的数据完成它们需要几天...):

for (j in 1:(nrow(mydf))) for (i in 1:(mydf[j,"n"])) write.table( mydf[j,c("id1","id2")], file="trials", append=T, row.names= F, col.names=F )

另一个尝试构建一个包含多行的新 data.frame,但它运行起来更慢。

towrite=data.frame(); for (j in 1:(nrow(mydf))) for (i in 1:(mydf[j,"n"])) towrite=rbind(towrite,mydf[j,c("id1","id2")])

在 R 下解决这个问题的最简单和最快的方法是什么?

最佳答案

尝试对数据进行子集化并批量保存:

mydf[rep(1:nrow(mydf), mydf$n), ]

如果您的数据是数字,那么处理矩阵会快得多:

mymat <- as.matrix(mydf)
reps <- as.integer(mydf$n)
mymat[rep(1:nrow(mymat), reps), ]

id1 id2 n
1 0 1032142 3
1 0 1032142 3
1 0 1032142 3
2 0 1072163 1
3 0 119323 2
3 0 119323 2

如果您设法操纵了原始 data.frame,那么您可能能够处理上述矩阵。

关于R:快速乘以data.frame(或其他数据结构)中的选定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767701/

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