r - 基于向量条件的子集数据框

标签 r dataframe subset

我有两个数据框

#df1
type <- c("A", "B", "C")
day_start <- c(5,8,4)
day_end <- c(12,10,11)
df1 <- cbind.data.frame(type, day_start, day_end)
df1
  type day_start day_end
1    A         5      12
2    B         8      10
3    C         4      11

#df2
value <- 1:10
day <- 4:13
df2 <- cbind.data.frame(day, value)
   day value
1    4     1
2    5     2
3    6     3
4    7     4
5    8     5
6    9     6
7   10     7
8   11     8
9   12     9
10  13    10

我想对 df2 进行子集化,以便 df1 中因子“类型”的每个级别都有自己的数据帧,仅包括该因子级别的 day_start 和 day_end 之间的行/天。

“A”的期望结果是..

list_of_dataframes$df_A
   day value
1    5     2
2    6     3
3    7     4
4    8     5
5    9     6
6   10     7
7   11     8
8   12     9

我找到了this question答案建议使用mapply(),但是,我只是不知道如何调整那里给出的代码以适应我的数据和期望的结果。有人可以帮助我吗?

最佳答案

以下解决方案假设您拥有几天的所有整数值,但如果该假设合理,那么它就是一个简单的单行代码:

> apply(df1, 1, function(x) df2[df2$day %in% x[2]:x[3],])
[[1]]
  day value
2   5     2
3   6     3
4   7     4
5   8     5
6   9     6
7  10     7
8  11     8
9  12     9

[[2]]
  day value
5   8     5
6   9     6
7  10     7

[[3]]
  day value
1   4     1
2   5     2
3   6     3
4   7     4
5   8     5
6   9     6
7  10     7
8  11     8

您可以使用setNames来命名列表中的数据帧:

setNames(apply(df1, 1, function(x) df2[df2$day %in% x[2]:x[3],]),df1[,1])

关于r - 基于向量条件的子集数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856552/

相关文章:

r - 想知道如何输出我在经济学家杂志上看到的图表

r - 使用操作按钮的 Shiny 渲染图

R:使用转换表更新 data.frame 中的行名

python - 从年到月和周的日期偏移

python - Dataframe Apply方法返回多个元素(系列)

algorithm - 正整数和负整数的子集和

r - 如何水平对齐图(ggplot2)?

r - 使用 %in% 对 data.table 进行子集化

matlab - 在 MATLAB 中查找矩阵子集的最大值,同时保留完整矩阵的索引

r - 带有 dplyr R 的笛卡尔积