如何从';由';R中的函数是否可用?

如何从';由';R中的函数是否可用?,r,R,我有一组数据,有一个因变量和两个因子。我想在我的两个因素组合的每个子集内随机抽取因变量(替换)(检索到的随机样本数量应等于最初在两个因素组合中存在的数量)。我已经能够使用“by”函数来实现这一点。问题是输出是一个列表,我想要一些更容易访问的东西,但没有任何运气转换成数据帧。我的最终目标是运行上述模拟1000次,并为每个模拟计算为每个因素组合检索的随机样本的平均值 这将生成数据集: value<-runif(100,5,25) cat1<-factor(rep(1:10,10)) a&

我有一组数据,有一个因变量和两个因子。我想在我的两个因素组合的每个子集内随机抽取因变量(替换)(检索到的随机样本数量应等于最初在两个因素组合中存在的数量)。我已经能够使用“by”函数来实现这一点。问题是输出是一个列表,我想要一些更容易访问的东西,但没有任何运气转换成数据帧。我的最终目标是运行上述模拟1000次,并为每个模拟计算为每个因素组合检索的随机样本的平均值

这将生成数据集:

value<-runif(100,5,25)
cat1<-factor(rep(1:10,10))
a<-rep("A",50)
b<-rep("B",50)
cat2<-append(a,b)
data<-as.data.frame(cbind(value,cat1,cat2))

value作为一种更通用的方法,您可能希望使用
dplyr
而不是
by
。这样,您将保留data.frame

在这种情况下,您可以使用
groupby
按cat1和cat2分组,而不是使用
by
,并使用
mutate
在上添加新列。如果不想保留旧数据,可以将
new=
替换为
value=

library(dplyr)
data %>% group_by(cat1, cat2) %>%
         mutate(new = sample(value, length(value), replace = T))

Source: local data frame [100 x 4]
Groups: cat1, cat2 [20]

              value   cat1   cat2              new
             (fctr) (fctr) (fctr)           (fctr)
1  13.9639607304707      1      A 13.2139691384509
2  22.6068278681487      2      A 5.27278678957373
3  24.6930849226192      3      A 22.0293137291446
4   16.842244095169      4      A 9.56347029190511
5   18.467006101273      5      A 23.1605510273948
6  20.6661582039669      6      A 24.3043746100739
7  9.37060782220215      7      A 13.9268753770739
8  6.68592340312898      8      A  20.034239795059
9  6.95704637560993      9      A  12.676755907014
10 17.2769332909957     10      A  24.453850784339
..              ...    ...    ...

作为一种更通用的方法,您可能希望使用
dplyr
而不是
by
。这样,您将保留data.frame

在这种情况下,您可以使用
groupby
按cat1和cat2分组,而不是使用
by
,并使用
mutate
在上添加新列。如果不想保留旧数据,可以将
new=
替换为
value=

library(dplyr)
data %>% group_by(cat1, cat2) %>%
         mutate(new = sample(value, length(value), replace = T))

Source: local data frame [100 x 4]
Groups: cat1, cat2 [20]

              value   cat1   cat2              new
             (fctr) (fctr) (fctr)           (fctr)
1  13.9639607304707      1      A 13.2139691384509
2  22.6068278681487      2      A 5.27278678957373
3  24.6930849226192      3      A 22.0293137291446
4   16.842244095169      4      A 9.56347029190511
5   18.467006101273      5      A 23.1605510273948
6  20.6661582039669      6      A 24.3043746100739
7  9.37060782220215      7      A 13.9268753770739
8  6.68592340312898      8      A  20.034239795059
9  6.95704637560993      9      A  12.676755907014
10 17.2769332909957     10      A  24.453850784339
..              ...    ...    ...

尝试执行.call(rbind,list)
应该可以。警告消息:In(function(…,deparse.level=1):结果的列数不是向量长度的倍数(arg 12)谢谢你,SabDeM。你的解决方案对上面的模拟数据集非常有效。但在实际数据上运行这段代码时,我仍然面临的问题是,每个因子组合的模拟值数量并不等于所有因子组合的模拟值数量。因此,每行的列数并不相等,我得到了错误请尝试执行调用(rbind,list)应该可以完成此操作。警告消息:In(function(…,deparse.level=1):结果的列数不是向量长度的倍数(arg 12)谢谢你,SabDeM。你的解决方案对上面的模拟数据集非常有效。但在实际数据上运行这段代码时,我仍然面临的问题是,每个因子组合的模拟值数量并不等于所有因子组合的模拟值数量。因此,每行的列数并不相等,我得到了错误上面。这正是我试图做的,它工作得非常完美。谢谢,jeremycg!我能够使用上面的建议生成数据输出,但似乎“值”的随机样本是从“值”的整个分布中提取的。我所寻找的是一个随机抽取替换的解决方案,但仅从combi中提取ned cat1和cat2的水平,而不是整个价值分布。这正是我试图做的,它工作得非常完美。谢谢,jeremycg!我能够使用上面的建议生成数据输出,但似乎“价值”的随机样本是从“价值”的整个分布中提取的。我所寻找的是一个非常好的结果随机抽取替换样本,但仅从cat1和cat2的组合水平得出,而不是从整个价值分布得出。