创建随机选择行的方式的新数据框 - 循环

时间:2015-08-04 16:20:20

标签: r function dataframe subset random-sample

问题:

我有一个data.frame(hlth),由49个向量组成 - 数字(25:49)和因子(1:24)的混合。我试图随机选择50行,然后计算列仅表示数字列(删除其他值),然后将随机行均值放入新的data.frame(beta)。然后我想重复这个过程1000次。

我尝试过这个过程,但返回的值是相同的,新的方法不会输入新的data.frame

以下是data.frame(hlth)的几行和几列

DateIn adgadj Sex VetMedCharges pwtfc 1/01/2006 3.033310 STEER 0.00 675.1151 1/10/1992 3.388245 STEER 2540.33 640.2261 1/10/1995 3.550847 STEER 572.78 607.6200 1/10/1996 2.893707 HEIFER 549.42 425.5217 1/10/1996 3.647233 STEER 669.18 403.8238

到目前为止我使用过的代码:

set.seed[25]
beta<-data.frame()

net.row<-function(n=50){
 netcol=sample(1:nrow(hlth),size=n ,replace=TRUE)
 rNames <- row.names(hlth)
 subset(hlth,rNames%in%netrow,select=c(25:49))
 colMeans(s1,na.rm=TRUE,dims=1)
 }

 beta$net.row=replicate(1000,net.row()); net.row

我发现的两个问题是:

1)每次迭代返回相同的值

2)&#34;总结期间出错:类型&#39;封闭的对象&#39;不是子集表格&#34;当beta $ netrow

任何建议都将不胜感激!!!

1 个答案:

答案 0 :(得分:1)

只需添加我的评论(并首先粘贴):

netcol=sample(1:nrow(hlth),size=n ,replace=TRUE)大概应该由netrow = ...而错误是一个范围问题--R正在尝试将函数beta进行子集化,可能是因为找不到netRowMeans在你定义的data.frame中,移动到全局环境并在那里抛出错误。

还有其他一些事情。您没有将subset(hlth,rNames%in%netrow,select=c(25:49))分配给变量,我认为您要分配给s1,因此colMeans可能正在您在全局环境中设置的内容上运行。

如果要以这种方式直接将变量传递到数据框beta,则必须使用正确的列数和行数初始化beta - 列意味着你已经昏倒将是(1 x 25)的向量,因此不适合单列。您可能会更好地使用mat列和25行来初始化一个名为1000的矩阵(以避免与屏蔽实际错误消息的范围错误混淆)。

编辑:问题自我发布以来已经略有编辑,但大多数观点仍然有效。