【问题标题】:Create a new data frame of the means of randomly selected rows - looped创建随机选择行均值的新数据框 - 循环
【发布时间】:2015-10-27 03:50:53
【问题描述】:

问题:

我有一个由 49 个向量组成的 data.frame (hlth) - 数字 (25:49) 和因子 (1:24) 的混合。我正在尝试随机选择 50 行,然后仅计算数字列的列均值(删除其他值),然后将随机行均值放入新的 data.frame(测试版)中。然后我想将这个过程迭代 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) “结束时出错:‘闭包’类型的对象不是子集的”当 beta$netrow 时

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

【问题讨论】:

  • netcol=sample(1:nrow(hlth),size=n ,replace=TRUE) 应该是 netrow = ... 并且错误是一个范围界定问题 - R 试图子集函数 beta,可能又是一次,因为它在data.table 你已经定义,移动到全局环境并在那里抛出一个错误。

标签: r function dataframe subset random-sample


【解决方案1】:

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

netcol=sample(1:nrow(hlth),size=n ,replace=TRUE) 应该是 netrow = ... 并且错误是一个范围界定问题 - R 正在尝试子集函数 beta,可能又是因为它在 data.frame you' 中找不到 netRowMeans已定义,移动到全局环境并在那里引发错误。

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

如果您想以这种方式将变量直接传递到数据框 beta,则必须使用正确的列数和行数初始化 beta - 该列表示您已通过out 将是(1 x 25) 的向量,因此不适合单列。您可能会更好地初始化一个名为 mat 的矩阵或其他东西(以避免与掩盖实际错误消息的范围错误混淆),其中包含 25 列和 1000 行。

编辑:自从我发布此问题后,问题已被略微编辑,但大多数观点仍然有效。

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2020-04-03
    • 2013-04-02
    • 2017-10-10
    • 2020-02-19
    相关资源
    最近更新 更多