重塑原始目的地数据

时间:2019-03-22 10:34:50

标签: r dplyr reshape

我需要转动此数据框:

enter image description here

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

插入这样的数据帧:

enter image description here

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

我正在尝试用dplyr重塑它。是否存在现有功能或方法?

2 个答案:

答案 0 :(得分:3)

一个选择是基于每行的最小值在标签“ AtoB / BtoA”之间创建一个在“ A”和“ B”之间的标识符列,然后通过以下方式更改“ A”,“ B”中的值min/max的每一行(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

答案 1 :(得分:2)

使用<preference name="android-windowSoftInputMode" value="stateVisible|adjustResize" /> R(这可能需要插入一个或多个空格)。还假定to和fro-value是连续输入的。

base

结果:

 new_df<-cbind(df[seq(1,nrow(df), by=2),], df[seq(2,nrow(df), by=2),])[,-c(4,5)]
names(new_df)<-c("A","B","AtoB","BtoA")  
new_df