gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:33:47 26 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答案建议使用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/

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