除了唯一键ID1之外,我已将两个具有相同列名但数值不同的数据帧合并在一起。
collated <- merge(data1,data2, by=c('ID1'))
在合并数据集中,后缀清楚地表明列来自的数据集。即a.x
,a.y
,b.x
,b.y
,c.x
,c.y
等。
但是,我不会提前知道列的名称。有没有快速的方法可以从a.x
a.y
b.x
从b.y
,c.x
从c.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']);
答案 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