r - 基于R中的多个范围获取数据框中的行
问题描述
假设我有这张桌子
a b
1 5 12
2 6 17
3 7 28
4 8 12
5 9 17
6 10 28
7 15 12
8 25 14
9 13 29
还有另一个带有索引范围的表:
start end
1 2 3
2 5 7
我想根据第二个表中的索引范围获取第一个表中的行,并使用组名进行区分,如下所示:
a b group
2 6 17 1
3 7 28 1
5 9 17 2
6 10 28 2
7 15 12 2
我如何在 R 中实现这一点?
解决方案
我们可以从using中df1
获取行索引值的子集。 df2
Map
do.call(rbind, Map(function(x, y, z) transform(df1[x:y, ], group = z),
df2$start, df2$end, seq_len(nrow(df2))))
或在purrr
:
purrr::map2_dfr(df2$start, df2$end, ~df1[.x:.y, ], .id = "group")
# group a b
#1 1 6 17
#2 1 7 28
#3 2 9 17
#4 2 10 28
#5 2 15 12
数据
df1 <- structure(list(a = c(5L, 6L, 7L, 8L, 9L, 10L, 15L, 25L, 13L),
b = c(12L, 17L, 28L, 12L, 17L, 28L, 12L, 14L, 29L)),
class = "data.frame", row.names = c(NA, -9L))
df2 <- structure(list(start = c(2L, 5L), end = c(3L, 7L)),
class = "data.frame", row.names = c(NA, -2L))
推荐阅读
- ios - 为什么我的 Text 视图与顶部对齐,但我的 ScrollView 与中心对齐?
- reactjs - 如何获取参数数据?
- flutter - 在 Flutter 中滚动页面时无法保存值
- c# - log4net中的时间戳,是生成日志条目的时间还是写入文件的时间?
- macos - mac终端上字符串的UTF8编码
- python - 创建两个数字之间的列表列表 --- Python
- ruby-on-rails - Ruby on Rails:未加载种子数据
- python - 将字典转换为数据框作为python中的预期输出
- stock - 如何获得谷歌金融交易数量的公式。?
- pyspark - 如何在 PySpark 中保存列计算语句?