gpt4 book ai didi

R:基于多个变量的多个值的子集数据框

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

我需要根据与第二个数据集 ( df1 ) 匹配的特定日期、ID#、事件开始时间和事件结束时间的组合,从第一个数据集(此处称为 df2)中提取记录。当只有 1 个日期、ID 和事件开始和结束时间时一切正常,但是数据集之间的某些匹配记录包含多个 ID、日期或时间,我无法从 df1 获取记录在这些情况下正确子集。我最终想把它放在一个 FOR 循环或独立函数中,因为我有一个相当大的数据集。这是我到目前为止所得到的:

我开始只是匹配两个数据集之间的日期,如下所示:

match_dates <- as.character(intersect(df1$Date, df2$Date))

然后我选择了 df2中的记录基于第一个匹配日期,同时保留其他列,以便我获得所需的其他 ID 和时间信息:
records <- df2[which(df2$Date == match_dates[1]), ]

日期、ID、开始和结束时间来自 records然后是:
[1] "01-04-2009" "599091"     "12:00"      "17:21" 

最后我子集 df1基于日期、ID 和时间的事件之前和之后 records并将它们组合成一个名为 final 的新数据框获取包含在 df1 中的数据我最终需要的。
before <- subset(df1, NUM==records$ID & Date==records$Date & Time<records$Start)
after <- subset(df1, NUM==records$ID & Date==records$Date & Time>records$End)
final <- rbind(before, after)

这是真正的问题 - 一些匹配的日期在 df2 中有超过 1 个对应的行,并返回多个 ID 或时间。以下是多条记录的示例:
records <- df2[which(df2$Date == match_dates[25]), ]

> records$ID
[1] 507646 680845 680845
> records$Date
[1] "04-02-2009" "04-02-2009" "04-02-2009"
> records$Start
[1] "09:43" "05:37" "11:59"
> records$End
[1] "05:19" "11:29" "16:47"

当我尝试对 df1 进行子集化时基于此,我收到一个错误:
before <- subset(df1, NUM==records$ID & Date==records$Date & Time<records$Start)
Warning messages:
1: In NUM == records$ID :
longer object length is not a multiple of shorter object length
2: In Date == records$Date :
longer object length is not a multiple of shorter object length
3: In Time < records$Start :
longer object length is not a multiple of shorter object length

尝试为每个 ID-日期-时间组合手动执行此操作会很乏味。我有 9 年的数据,所有数据集之间的给定年份都有多个匹配日期,所以理想情况下,我想将其设置为 FOR 循环,或其中包含 FOR 循环的函数,但我不能不要通过这个。提前感谢您的任何提示!

最佳答案

如果您问我认为您是 dplyr 中的 filter() 函数吗?套餐结合match功能做你正在寻找的东西。

> df1 <- data.frame(A = c(rep(1,4),rep(2,4),rep(3,4)), B = c(rep(1:4,3)))
> df1
A B
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 2
7 2 3
8 2 4
9 3 1
10 3 2
11 3 3
12 3 4
> df2 <- data.frame(A = c(1,2), B = c(3,4))
> df2
A B
1 1 3
2 2 4
> filter(df1, A %in% df2$A, B %in% df2$B)
A B
1 1 3
2 1 4
3 2 3
4 2 4

关于R:基于多个变量的多个值的子集数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425847/

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