2012-10-16 30 views
4

多个样品,我试图创建R,在那里我有一个大的数据集一个简单的循环,我想从这个数据集创建多个较小的样本并将其导出到Excel:回路R从单一数据集

我想它的工作是这样,但事实并非如此:

idorg <- c(1,2,3,4,5) 
x <- c(14,20,21,16,17) 
y <- c(31,21,20,50,13) 
dataset <- cbind (idorg,x,y) 


for (i in 1:4) 
{ 
attempt[i] <- dataset[sample(1:nrow(dataset), 3, replace=FALSE),] 
write.table(attempt[i], "C:/Users/me/Desktop/WWD/Excel/dataset[i].xls", sep='\t') 
} 

在Stata你需要保留和做这样的循环,当恢复你的数据,但是这也是必要的,R'

+0

为什么要这样投票结束?海事组织这是一个完美的适合这个网站的Q。 –

回答

4

你有以下几个问题:

  1. 尝试未声明的,因此attempt[i]不能分配给。可以将它作为填充循环内的矩阵(如果要保留样本),或将其用作临时变量attempt
  2. 文件名是文学名称,您需要使用paste()sprintf()在文件名中包含变量i的值。

下面是代码的工作版本:

idorg <- c(1,2,3,4,5) 
x <- c(14,20,21,16,17) 
y <- c(31,21,20,50,13) 
dataset <- cbind (idorg,x,y) 

for (i in 1:4) { 
    attempt <- dataset[sample(1:nrow(dataset), 3, replace=FALSE),] 
    write.table(attempt, sprintf("C:/Users/me/Desktop/WWD/Excel/dataset[%d].xls", i), sep='\t') 
} 

威尔的Excel能够读取这样的制表符分隔表?我不确定;我会制作逗号分隔的表格并将其保存为.csv

+0

不错的使用'sprintf()'。 +1 – A5C1D2H2I1M1N2O1R2T1

2

Stata的不同,你不需要在R.对于这种操作的保护和恢复数据

我认为一月份的解决方案解决你的问题,但我想分享另一种选择:使用lapply()获得该数据集的所有样本的列表:

set.seed(1) # So you can reproduce these results 
temp <- setNames(lapply(1:4, 
         function(x) { 
          x <- dataset[sample(1:nrow(dataset), 
               3, replace = FALSE), ]; x }), 
       paste0("attempt.", 1:4)) 

这已经创造了一个名为list()的“临时”即包括四个data.frame秒。

temp 
# $attempt.1 
#  idorg x y 
# [1,]  2 20 21 
# [2,]  5 17 13 
# [3,]  4 16 50 
# 
# $attempt.2 
#  idorg x y 
# [1,]  5 17 13 
# [2,]  1 14 31 
# [3,]  3 21 20 
# 
# $attempt.3 
#  idorg x y 
# [1,]  5 17 13 
# [2,]  3 21 20 
# [3,]  2 20 21 
# 
# $attempt.4 
#  idorg x y 
# [1,]  1 14 31 
# [2,]  5 17 13 
# [3,]  4 16 50 

列表是在R.非常方便您现在可以使用lapply()做其他好玩的东西,就像如果你想找出该行资金,你可以做lapply(temp, rowSums)。或者,如果您想输出单独的CSV文件(可由Excel读取),您可以执行如下操作:

lapply(names(temp), function(x) write.csv(temp[[x]], 
          file = paste0(x, ".csv")))