【问题标题】:extract data from loop use R从循环中提取数据使用 R
【发布时间】:2015-01-11 11:35:07
【问题描述】:

当我在循环中使用命令打印时,我有 6140 个原始数据:

for (i in 1:614 ){
print(paste(urls[i], 0:10)))
}

但我不知道如何将所有值提取到数据框中 当我创建变量时:

for (i in 1:614 ){
 a<- as.data.frame(paste(urls[i], 1:10))
  }

我的链接只有 10 个 obj。

一般来说,我希望有 6140 个 obj 和我的数据

P.S.对不起我的英语:)

【问题讨论】:

  • 什么是urls?字符向量?数据框?一个列表?如果是数据框,请查看this existing answer
  • urls 是字符向量
  • data.frame(rep(urls, each=10)) 将为您提供一个数据框,其中 urls 向量的每个元素重复 10 次。如果您打算在 R 中进行任何实际工作,那么您将从了解如何进行矢量化操作中受益。 SO 上的R tag wiki 是获取资源以更好地学习 R 的好地方。
  • 非常感谢您对初学者的帮助:)

标签: r loops for-loop


【解决方案1】:

我想说最简单的方法是使用foreach package。它提供了一个.combine 参数,可以非常容易地将每个循环的结果连接在一起。

# Create a reproducible example of urls
urls <- rep_len (letters, 614)

# Install and load `foreach`
install.packages ("foreach")
library (foreach)

# Create the loop and indicate that you want to join the results by row
a <- foreach (i=1:614, .combine = rbind) %do% {
  as.data.frame (paste(urls[i], 0:10))
}

就是这样。您可以将结果组合成多种类(向量、数据框、列表等)和方式(按行、按列等)。学习使用foreach 不仅有利于解决这个问题,而且如果以后需要进行某种并行计算,它也会非常有用。

如果您想坚持传统循环,可以采用以下多种方法之一:

a <- data.frame ()
for (i in 1:614){
  a <- rbind (a, as.data.frame (paste(urls[i], 0:10)))
}

编码愉快!

【讨论】:

  • 不错的解决方案。 (+1)。但是,@hrbrmstr 给出的矢量化解决方案 data.frame(paste(rep(urls, each=11), 0:10)) 在这种情况下要好得多,恕我直言。
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2022-09-30
相关资源
最近更新 更多