R - 合并后将两列添加后缀

时间:2016-03-11 18:06:03

标签: r merge

除了唯一键ID1之外,我已将两个具有相同列名但数值不同的数据帧合并在一起。

collated <- merge(data1,data2, by=c('ID1'))

在合并数据集中,后缀清楚地表明列来自的数据集。即a.xa.yb.xb.yc.xc.y等。

但是,我不会提前知道列的名称。有没有快速的方法可以从a.x a.y b.xb.yc.xc.y减去collated$a.z <- collated$a.x - collated$a.y而不知道后缀中的位预先?这是创建a,但不知道列提前被调用data.frame(data1[1], data2[-1]-data1[-1])(b,c等相同)

我可以通过解析colNames来做到这一点,但我不确定是否有一个明显的替代品我可能会丢失。 @Frank建议使用‘-’ only defined for equally-sized data frames。但是,这会出现错误set.seed(45) data2 <- data.frame(ID1= rep(1:200), a= rnorm(400), b= rnorm(400), c= rnorm(400), d= rnorm(400)) data1 <- data.frame(ID1= rep(1:200), a= rnorm(200), b= rnorm(200), c= rnorm(200), d= rnorm(200)) ,因为框架的大小不同。

注意:可以通过以下方式创建示例数据集:

$mysqli = mysqli_connect("localhost", "andes", "andes123","andes");
$query= "select calendar_table.dt, count(BP) as 'Number'
from calendar_table
left join tbl021_vacaciones on calendar_table.dt between
tbl021_vacaciones.fecha_inicio and tbl021_vacaciones.fecha_fin
where (calendar_table.dt between '2016-01-29' and '2016-03-31')
group by calendar_table.dt";
$request=mysqli_query($mysqli,$query);
$row=mysqli_fetch_array($request);
$Resultado= print_r ($row['dt'], $row['Number']);

1 个答案:

答案 0 :(得分:0)

我编写了safejoin软件包,它非常简洁地解决了这个问题

# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)
res <- safe_left_join(data2, data1, by = "ID1",conflict = `-`)
head(res)
#   ID1           a          b           c          d
# 1   1  0.39817075  0.1467486  1.72932602  1.8695649
# 2   2  0.08119715 -1.9551363 -0.58216793  3.0525365
# 3   3 -0.38262213 -0.7642318  0.07737453  1.1783046
# 4   4 -1.01591432  0.3900114 -0.75116672  0.3287219
# 5   5 -0.26112151 -1.4333588 -0.51665036 -0.8413423
# 6   6 -0.92123205  0.1632439  0.81327403 -0.1760599