我需要转动此数据框:
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重塑它。是否存在现有功能或方法?
答案 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