r - 使用交替的“非连接重复变量”而不是 .x,.x,.x,.y,.y,.y 格式和相应的计算来进行 full_join 的方法
问题描述
library(dplyr)
x1 <- tibble(ID = rep(1,4),
Measure = c("Height","Weight","Width","Length"),
AD1= rpois(4,10),
AD2= rpois(4,9))
x2 <- tibble(ID = rep(2,4),
Measure = c("Height","Weight","Width","Length"),
AD1= rpois(4,20),
AD2= rpois(4,19))
xdiff <- x1 %>%
full_join(x2,by="Measure",
suffix=c("_1","_2")) %>%
mutate(diff1 = AD1_1-AD1_2,
diff2 = AD2_1-AD2_2)
ID_1 Measure AD1_1 AD2_1 ID_2 AD1_2 AD2_2 diff1 diff2
<dbl> <chr> <int> <int> <dbl> <int> <int> <int> <int>
1 1 Height 10 12 2 20 15 -10 -3
2 1 Weight 7 10 2 11 16 -4 -6
3 1 Width 12 11 2 22 17 -10 -6
4 1 Length 11 9 2 24 16 -13 -7
xdesire <- xdiff %>%
select(Measure,AD1_1,AD1_2,diff1,AD2_1,AD2_2,diff2)
Measure AD1_1 AD1_2 diff1 AD2_1 AD2_2 diff2
<chr> <int> <int> <int> <int> <int> <int>
1 Height 10 20 -10 12 15 -3
2 Weight 7 11 -4 10 16 -6
3 Width 12 22 -10 11 17 -6
4 Length 11 24 -13 9 16 -7
full_join() 使用默认参数,将按照 x、x、x、y、y、y 的顺序为重复变量添加后缀。从技术上讲,我可以根据需要使用 select() 对列进行排序,但是如果数据具有大量列,例如 AD1:AD200,则效率将非常低。
dply: 在 R 中按字母顺序排列列显示按字母顺序排列列的方法,但在我的情况下,每个变量(AD1、diff1、AD2、diff)之间都需要“差异”列。
我想知道 full_join() 是否允许重复变量交替出现,以及我是否可以通过 join() 函数直接添加计算。
当然,也欢迎其他方法,例如更高级的 select() 参数。
解决方案
一个选项是使用列名order
提取的第一个数字子字符串parse_number
library(dplyr)
xdiff %>%
select(Measure, order(readr::parse_number(names(.))), -starts_with("ID"))
-输出
# A tibble: 4 x 7
# Measure AD1_1 AD1_2 diff1 AD2_1 AD2_2 diff2
# <chr> <int> <int> <int> <int> <int> <int>
#1 Height 10 25 -15 5 20 -15
#2 Weight 16 28 -12 13 15 -2
#3 Width 12 19 -7 9 25 -16
#4 Length 10 29 -19 4 23 -19
推荐阅读
- mysql - 来自 VB.net 的变量 MySql Where 查询
- javascript - Vue.Js:列表渲染
- python - TensorFlow 分类模型返回不正确的输出形状
- laravel - Laravel:如何从自定义提供程序设置闪存数据?
- sql - 错误 3061:在 VBA 中使用 datepart() 时需要的参数 1 太少
- javascript - 为什么我的临时文件在一个 PHP 页面上被删除而不是另一个?
- html - SVG 不显示在按钮元素中
- regex - 在正则表达式子字符串中需要一些指导
- sql-server - 在 Windows 中更改 SQL 默认数据库位置的脚本
- c# - 子任务异常时中断调用线程