gpt4 book ai didi

r - 我正在寻找一种方法来反转一行中 2 列的值,当该反转存在于数据框中时?

转载 作者:行者123 更新时间:2023-12-02 15:43:54 37 4
gpt4 key购买 nike

这是我的数据框:

DF <- data.frame(
VAR1 = c("A", "A", "B", "B", "B", "C", "C"),
VAR2 = c("B", "C", "A", "D", "C", "B", "D"),
VAR3 = c(1, 1, 1, 2, 4, 6, 4)
)

我想要这个:

VAR1 VAR2 VAR3  
A B 2
A C 1
B D 2
B C 10
C D 4

如果有两行 (VAR1=A, VAR2=B, VAR3=X)(VAR2=B, VAR1=A, VAR3=Y) ,我想要这样一行 (VAR1=A, VAR2=B, VAR3=X+Y)。因此,如果前两个变量是“逆”的,我希望有一行包含它们的总和。

如果两行具有相反的值,我试图有一个列说"is",但我找不到办法做到这一点。我的代码:

DF <- DF %>%
mutate(VAR4 = case_when(VAR2 %in% DF$VAR1 &
VAR1 %in%
(DF %>%
filter(VAR1 == VAR2) %>%
pull(VAR2)
) ~ "Yes",
TRUE ~ 'No' ))
`

这是结果:

VAR1   VAR2   VAR3   VAR4  
A B 1 No
A C 1 No
B A 1 No
B D 2 No
B C 4 No
C B 6 No
C D 4 No

我的代码不起作用,因为我的过滤器没有考虑 VAR2 %in% DF$VAR1 的结果。

有人有想法吗?

最佳答案

可以先用apply排序,再总结:

DF[1:2] <- t(apply(DF[1:2], 1, sort))
DF %>%
group_by(VAR1, VAR2) %>%
summarise(VAR3 = sum(VAR3))

# A tibble: 5 × 3
# Groups: VAR1 [3]
VAR1 VAR2 VAR3
<chr> <chr> <dbl>
1 A B 2
2 A C 1
3 B C 10
4 B D 2
5 C D 4

或者,在单管道中:

DF %>% 
mutate(VAR = pmap(., ~ sort(c(..1, ..2)) %>%
set_names(., c("VAR1", "VAR2")))) %>%
group_by(VAR) %>%
summarise(VAR3 = sum(VAR3)) %>%
unnest_wider(VAR)

关于r - 我正在寻找一种方法来反转一行中 2 列的值,当该反转存在于数据框中时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75029956/

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