首页 > 解决方案 > 重塑起始目的地数据

问题描述

我需要打开这个数据框:

在此处输入图像描述

df1 <- data.frame(A = c(1,2,3), B = c(2,1,4), Flow = c(50,30,20))

进入这样的数据框:

在此处输入图像描述

df2 <- data.frame(A = c(1,3), B = c(3,4), AtoB = c(50,20), BtoA = c(20, NA))

我正在尝试用 dplyr 重塑它。是否有现有的功能或方法可以做到这一点?

标签: rdplyrreshape

解决方案


一个选项是根据每行中的最小值在“A”和“B”之间创建一个带有标签“AtoB/BtoA”的标识符列,然后通过取min/max每个值来更改“A”、“B”中的值行 ( pmin/pmax) 和spread输出回到“宽”格式

library(dplyr)
library(tidyr)
df1 %>%      
  mutate(grpIdent = case_when(A == pmin(A, B) ~ 'AtoB', TRUE ~ 'BtoA'),
         A1= pmin(A, B), B1 = pmax(A, B)) %>%
  select(A = A1, B = B1, grpIdent, Flow) %>%
  spread(grpIdent, Flow)
#   A B AtoB BtoA
#1 1 2   50   30
#2 3 4   20   NA

推荐阅读