gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:36:35 25 4
gpt4 key购买 nike

我有两个数据框

#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在 SO 上,答案建议使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com