R 按条件对数据帧列表进行子集设置
对不起,我还不能嵌入图片 我在一个列表中有21个数据帧(R 按条件对数据帧列表进行子集设置,r,sorting,R,Sorting,对不起,我还不能嵌入图片 我在一个列表中有21个数据帧(listb),所有的标题都是相同的Timestamp,rainment 我想通过降雨(降序)对它们进行排序,然后对21个数据帧中的前30个数据帧(包括相应的时间戳)进行子集。然后将它们放回一个数据帧中,以初始数据帧的名称作为标题 请在下面找到数据帧列表,以及从b1数据帧中剪下的一小部分 我是否需要为每个新子集创建一个新的数据帧,然后将它们合并到一个列表中 Descending_b1 <- listb$b1[order(-Rainfal
listb
),所有的标题都是相同的Timestamp
,rainment
我想通过降雨
(降序)对它们进行排序,然后对21个数据帧中的前30个数据帧(包括相应的时间戳
)进行子集。然后将它们放回一个数据帧中,以初始数据帧的名称作为标题
请在下面找到数据帧列表,以及从b1
数据帧中剪下的一小部分
我是否需要为每个新子集创建一个新的数据帧,然后将它们合并到一个列表中
Descending_b1 <- listb$b1[order(-Rainfall),]
b1_30 <- Descending_b1[1:30,1:2]
2013年1月24日
#> 2640 2/2/2004 131
#> 4874 21/3/2010 131
#> 7183 16/7/2016 129
#> 4826 1/2/2010 122
#> 3725 26/1/2007 112
#> 939 29/12/1998 109
#> 4118 24/2/2008 101
#> 2278 5/2/2003 94
#> 2279 6/2/2003 92
#> 1827 11/11/2001 88
#> 5131 3/12/2010 82
#> 8514 8/3/2020 81
#> 5155 27/12/2010 78
#> 605 29/1/1998 74
#> 7642 18/10/2017 71
#> 3771 13/3/2007 69
#> 3429 5/4/2006 65
#> 3495 10/6/2006 64
#> 4387 19/11/2008 64
#> 6671 20/2/2015 64
#> 6340 26/3/2014 63
#> 7425 15/3/2017 63
#> 5398 27/8/2011 62
#> 5950 1/3/2013 61
#> 815 27/8/1998 60
#> 5566 11/2/2012 60
#> 4105 11/2/2008 58
#> 5916 26/1/2013 57
是的,我希望用列表中的其余数据帧创建一个新的数据帧,同时保留初始数据帧名称,然后将它们合并到一个新列表中
set.seed(2021)
listb <- list(b1 = data.frame(Timestamp = as.Date("2010-01-01") + days(sample(1:100, 10)),
Rainfall = sample(200:300, 10)),
b2 = data.frame(Timestamp = as.Date("2010-01-01") + days(sample(1:100, 10)),
Rainfall = sample(200:300, 10)),
b3 = data.frame(Timestamp = as.Date("2010-01-01") + days(sample(1:100, 10)),
Rainfall = sample(200:300, 10)))
> listb
$b1
Timestamp Rainfall
1 2010-01-08 275
2 2010-02-08 250
3 2010-02-16 259
4 2010-02-28 217
5 2010-01-13 298
6 2010-03-12 202
7 2010-03-06 245
8 2010-04-10 225
9 2010-03-11 235
10 2010-01-24 285
$b2
Timestamp Rainfall
1 2010-02-01 242
2 2010-04-09 258
3 2010-01-20 269
4 2010-03-10 285
5 2010-03-28 298
6 2010-01-06 262
7 2010-03-15 278
8 2010-03-05 233
9 2010-02-08 221
10 2010-01-19 215
$b3
Timestamp Rainfall
1 2010-03-21 216
2 2010-03-30 240
3 2010-01-18 230
4 2010-01-21 272
5 2010-03-10 292
6 2010-04-05 226
7 2010-03-14 210
8 2010-03-25 235
9 2010-03-09 237
10 2010-01-03 278
如果要将输出返回到类似的列表中
purrr::map(listb, ~ .x %>%
slice_max(Rainfall, n=5))
$b1
Timestamp Rainfall
1 2010-01-13 298
2 2010-01-24 285
3 2010-01-08 275
4 2010-02-16 259
5 2010-02-08 250
$b2
Timestamp Rainfall
1 2010-03-28 298
2 2010-03-10 285
3 2010-03-15 278
4 2010-01-20 269
5 2010-01-06 262
$b3
Timestamp Rainfall
1 2010-03-10 292
2 2010-01-03 278
3 2010-01-21 272
4 2010-03-30 240
5 2010-03-09 237
图像不是发布数据(或代码)的好方法。看到了吗。您能否以
dput
格式发布样本数据?请使用您尝试过的代码和dput(b1)
的输出编辑问题。或者,如果dput(head(b1,20))的输出太大。得到结果后,使用cbind
作为列进行堆栈,或者使用`rbind作为行进行组合do.call(rbind,lappy(listb,function(x)head(x[order(-x$rainval),],30))
@AnilGoyal不应该有什么不同..fixedIt只是一个小错误,因为我没有从R复制和粘贴代码。变量名应该是相同的。进一步的问题是,我如何才能做到这一点,但仅限于2000年1月1日之后的日期?请提供excel文件的链接,如果驱动器上有?
purrr::map2_dfr(listb, names(listb), ~ .x %>%
mutate(list_name = .y) %>%
slice_max(Rainfall, n=5))
Timestamp Rainfall list_name
1 2010-01-13 298 b1
2 2010-01-24 285 b1
3 2010-01-08 275 b1
4 2010-02-16 259 b1
5 2010-02-08 250 b1
6 2010-03-28 298 b2
7 2010-03-10 285 b2
8 2010-03-15 278 b2
9 2010-01-20 269 b2
10 2010-01-06 262 b2
11 2010-03-10 292 b3
12 2010-01-03 278 b3
13 2010-01-21 272 b3
14 2010-03-30 240 b3
15 2010-03-09 237 b3
purrr::map(listb, ~ .x %>%
slice_max(Rainfall, n=5))
$b1
Timestamp Rainfall
1 2010-01-13 298
2 2010-01-24 285
3 2010-01-08 275
4 2010-02-16 259
5 2010-02-08 250
$b2
Timestamp Rainfall
1 2010-03-28 298
2 2010-03-10 285
3 2010-03-15 278
4 2010-01-20 269
5 2010-01-06 262
$b3
Timestamp Rainfall
1 2010-03-10 292
2 2010-01-03 278
3 2010-01-21 272
4 2010-03-30 240
5 2010-03-09 237