Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在r中创建子列表_R_List - Fatal编程技术网

在r中创建子列表

在r中创建子列表,r,list,R,List,我有这个数据框: x y freq E 1 10 15 100 6 2 20 25 100 5 3 30 35 100 1 4 40 45 100 23 5 50 55 100 11 6 60 65 100 13 7 70 75 100 27 8 80 85 100 30 9 90 95 100 15 10 100 105 100 28 由此,我想创建一个列表,每个成员必须包含随机选择的90%到80

我有这个数据框:

     x   y freq  E
1   10  15  100  6
2   20  25  100  5
3   30  35  100  1
4   40  45  100 23
5   50  55  100 11
6   60  65  100 13
7   70  75  100 27
8   80  85  100 30
9   90  95  100 15
10 100 105  100 28
由此,我想创建一个列表,每个成员必须包含随机选择的90%到80%的行数据(我想是使用
sample\n

我想要这样的东西(在下面的例子中,为了简单起见,选择不是随机的):

你可以做:

library(dplyr)
list("80%" = sample_frac(df, .8), "90%" = sample_frac(df, .9))
(假设您的数据帧称为df)

根据Cath的建议,您可以使用
sapply
seq
创建一个90%到10%的数据帧列表:

sapply(seq(0.9, 0.1, -0.1), 
       function(pct) {df[sample(1:nrow(df), round(pct*nrow(df)), replace=FALSE), ]}, 
       simplify=FALSE)
如果您想使用
sample\u frac
,您可以这样修改她的代码:

sapply(seq(0.9, 0.1, -0.1), 
       function(pct) {sample_frac(df, pct)}, 
       simplify=FALSE)
你可以做:

library(dplyr)
list("80%" = sample_frac(df, .8), "90%" = sample_frac(df, .9))
(假设您的数据帧称为df)

根据Cath的建议,您可以使用
sapply
seq
创建一个90%到10%的数据帧列表:

sapply(seq(0.9, 0.1, -0.1), 
       function(pct) {df[sample(1:nrow(df), round(pct*nrow(df)), replace=FALSE), ]}, 
       simplify=FALSE)
如果您想使用
sample\u frac
,您可以这样修改她的代码:

sapply(seq(0.9, 0.1, -0.1), 
       function(pct) {sample_frac(df, pct)}, 
       simplify=FALSE)

或者类似于
sapply(c(“90%”,80%”),函数(pct){df[sample(1:nrow(df),round(as.numeric(substr(pct,1,2))/100*nrow(df)),replace=FALSE),]},simplify=FALSE)
@beetroot谢谢!没关系。。。现在如果我想包括90%到10%(90%,80%,70%,10%)。。。有更简洁的东西可以写吗?你可以尝试
sapply(paste0(seq(90,10,-10),“%”),函数(pct){df[sample(1:nrow(df),round(as.numeric(substr(pct,1,2))/100*nrow(df)),replace=FALSE),]},simplify=FALSE)
或类似于
sample\u frac
paste0…
步骤仅适用于名称,因此使用
seq(0.9,0.1,-0.1)
然后避免
substr
可以更简单
sapply(seq(0.9,0.1,-0.1),函数(pct){df[sample(1:nrow(df),round(pct*nrow(df)),replace=FALSE),]},simplify=FALSE)
应该可以工作(或相应地使用
sample_frac
无需第二个答案,但可以用
sapply
的方式编辑您的答案;-)或类似
sapply(c(“90%”,80%”),函数(pct){df[sample(1:nrow(df),round(as.numeric)(substr(pct,1,2))/100*nrow(df)),replace=FALSE),]},simplify=FALSE)
@beetroot谢谢!没关系…现在如果我想把90%的内容包括到10%(90%,80%,70%,10%)…还有更简洁的东西可以写吗?你可以尝试
sapply(粘贴0(seq(90,10,-10),“%”),函数(pct){df[sample(1:nrow(df),round(as.numeric(substr(pct,1,2))/100*nrow(df)),replace=FALSE),]},simplify=FALSE)
或与
示例
类似。粘贴0…步骤仅用于名称,因此使用
seq(0.9,0.1,-0.1)
然后避免
substr
可以更简单
sapply(seq(0.9,0.1,-0.1),函数(pct){df[示例(1:nrow(df),圆形(pct*nrow(df)),replace=FALSE),]},simplify=FALSE)
应该有效(或者相应地使用
示例_frac
不需要第二个答案,但可以使用
sapply
方式编辑您的答案;-)