下面是我的数据框:
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)
,所以如果前两个变量是“逆”的,我想有一行是它们的和。
我试图有一列说“是”,如果两行有相反的值,但我找不到一种方法来做到这一点。我的代码:
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
我的代码不起作用,因为我的过滤器没有考虑% DF$VAR1中VAR2%的结果。
有人有主意吗?
2条答案
按热度按时间7fhtutme1#
您可以先使用
apply
进行排序,然后总结:或者,在单管中:
g9icjywg2#
您可以尝试:
输出: