gpt4 book ai didi

r - 如何匹配两个数据帧的字符值并在 R 中应用与此匹配对应的函数?

转载 作者:行者123 更新时间:2023-12-05 01:03:24 24 4
gpt4 key购买 nike

我有两个如下所示的数据框:


library(tidyverse)
date = c(rep(as.Date("2022-01-01"),4),rep(as.Date("2022-02-01"),4),rep(as.Date("2022-03-01"),3))
A = seq(1,11,1)
B = seq(12,22,1)
C = seq(23,33,1)
symbol = c(rep("A",4),rep("B,C",4),rep("D,A",3))
df1 = tibble(date,A,B,C,symbol);df1
# A tibble: 11 × 5
date A B C symbol
<date> <dbl> <dbl> <dbl> <chr>
1 2022-01-01 1 12 23 A
2 2022-01-01 2 13 24 A
3 2022-01-01 3 14 25 A
4 2022-01-01 4 15 26 A
5 2022-02-01 5 16 27 B,C
6 2022-02-01 6 17 28 B,C
7 2022-02-01 7 18 29 B,C
8 2022-02-01 8 19 30 B,C
9 2022-03-01 9 20 31 D,A
10 2022-03-01 10 21 32 D,A
11 2022-03-01 11 22 33 D,A

第二个:


first = c("A","A","B","B","B")
second = c("D","F","A","C","D")
value = c(2,3,4,3,5)
df2 = tibble(first,second,value);df2
# A tibble: 5 × 3
first second value
<chr> <chr> <dbl>
1 A D 2
2 A F 3
3 B A 4
4 B C 3
5 B D 5

我想从第一个数据帧中搜索数据帧 2 (df2) 的第一列和第二列中的列符号的值。如果 df1 中的符号没有对取 A、B、C 列的最大值df1 中的子矩阵为 26。

如果有一对匹配项,例如 df1 和 df2 中的 B、C 取对应于 df1 中 df2 值的行的最小值。在我的示例中,列符号中的 B、C 存在于 df2 中并且具有因此,在 df1 中对应于 B、C 的子矩阵的第三行中的值 3 为 7、18、29,最小值为 7。对于 D,A,我必须在 D,A 子矩阵的第 2 行中取最小值df1 为 10,21,32,最小为 10。

最后我希望报告的数据框是这样的:

<头>
符号 计算
一个 26
B,C 7
D,A 10

如何在 R 中执行此操作(使用 dplyr)?

最佳答案

df1 %>%
separate(symbol, c("first", "second"), fill = "right", remove = FALSE)%>%
left_join(rbind(df2, transform(df2, first = second, second = first)))%>%
group_by(symbol)%>%
summarise(calc = if(is.na(value[1])) max(c_across(A:C))
else pmin(c_across(A:C))[value[1]])

# A tibble: 3 × 2
symbol calc
<chr> <dbl>
1 A 26
2 B,C 7
3 D,A 10

关于r - 如何匹配两个数据帧的字符值并在 R 中应用与此匹配对应的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74186683/

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