r - 重塑起始目的地数据
问题描述
我需要打开这个数据框:
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 重塑它。是否有现有的功能或方法可以做到这一点?
解决方案
一个选项是根据每行中的最小值在“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
推荐阅读
- angular - 如何将数据表放在中间而不占整个宽度
- r - 估算/填补时间段之间的缺失值
- ios - 如何有条件地显示远程通知?
- python - 这行中的“<”在做什么?:data += dt < b
- r - 使用 melt() 不按集合 ID 排序
- java - 当单选按钮ID增加时如何单击黄瓜中的单选按钮
- javascript - jQuery 如何计算有多少文本区域具有价值?(不是空的)
- javascript - 我可以将 N 个参数传递给 .bind()
- wolfram-mathematica - Mathematica:使用 NIntegrate 和 ' (微分)对数据进行误差拟合函数
- javascript - 使用延迟加载时如何在 Angular 中动态构建导航?