在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
方式编辑您的答案;-)