【问题标题】:R: help needed to write same code using apply function in RR:使用 R 中的应用函数编写相同代码所需的帮助
【发布时间】:2016-06-21 06:27:45
【问题描述】:

我需要将同一行数据框重复 n 次并将它们行绑定到新的数据框。

我可以使用 for 循环轻松完成,但它需要更多的计算时间。有人可以使用任何应用功能帮助我这样做吗?

下面是我的代码原型。

testdata<-data.table(v1=sample(1000),v2=sample(1000),v3=sample(1000),v4=as.integer(runif(1000,1,10)))## Sample data
testdata1<-data.table(v1=NA,v2=NA,v3=NA,v4=NA)##creating empty data frame
for(i in 1:nrow(testdata)){
  temp<-testdata[i,][rep(seq_len(nrow(testdata[i,])), each=testdata$v4[i]),]
  testdata1<-rbind(temp,testdata1)
}

【问题讨论】:

  • nrow(testdata[i,]) ...这对我来说没有意义。它总是会返回1,不是吗?
  • 是的,因为我在每一行上循环它只会返回 1。

标签: r


【解决方案1】:

我们不需要循环来执行此操作,因为 rep 是矢量化的。

testdata[rep(seq_len(.N),  testdata$v4)]

在上面的代码中,.N 表示行数,通过用seq_len 包装,我们得到序列。即如果行数为 1000,它将给出1:1000

只是用一个小例子来演示

rep(1:3, c(3,4,6))
#[1] 1 1 1 2 2 2 2 3 3 3 3 3 3

【讨论】:

  • 你能解释一下.N在这里做什么吗?一次需要每一行吗?据我所知 .N 用于获取计数。
  • 是的,它奏效了。感谢您的解决方案。勾选正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2019-02-12
  • 2014-05-20
相关资源
最近更新 更多