R:如果满足多个条件,则合并数据帧

时间:2016-06-06 13:33:21

标签: r merge

我喜欢合并两个数据集(Generaldata,每月结果),但同时也应该满足另一个条件(Startdate = colnames_of_monthlyresults)。

示例(请参阅问题末尾的代码):

Generaldata专栏:代码;开始日期(例如201601)

Code: 1,2,3
Startdate: 201601, 201511, 201512

每月结果栏目:代码;结果201201(例如5%); Result201202; ......; Result2011604

Code: 1,2,3
Result201511: 0, 20 , 0 
Result201512: 6, 30, 5
Result201601: 8, 40, 10

期望的结果:代码; Result_at_startdate

Code:  1,2,3
Result_startdate: 8, 20, 5

我尝试分两步完成: 首先,我将两个数据集合并为以下代码:

Testresults<- merge(x=Generaldata, y=Monthlyresults, by.y = "Code", by.x= "Code", 
                    all.x = TRUE, incomparables = NA)

结果我收到了一个包含太多列的数据框(每个月的结果超过4年),但我只对startdate中每个Person的结果的值感兴趣(并且稍后结束)。 我怎么能实现这个目标?

我尝试在merge函数的by =元素中包含这两个条件,但问题是我只需要引用结果数据集中的列名而不是rowentries。 我也尝试了ifelse函数,但后来我遇到了格式不一样的问题。 startdate列(“201601”)的条目不等于colname(“R201601”,因为列名不能以数字开头)。 在Excel中我可能会结合使用if和vlookup函数来实现它,但是我的数据集很大,可以使用Excel。

我是R初学者,如果有人可以帮助我,我会非常高兴。

示例R代码:

Generaldata<- data.frame("Code"=c(1,2,3), "Startdate"= c(201511, 201512, 201601))

Monthlyresults<- data.frame ("Code"=c(1,2,3), "R201511"=c(0,20,0), "R201512"=c(6,30,5), "R201601"=c(8,40,10) )

Testresult <-merge(x=Generaldata, y=Monthlyresults, by.y = "Code", by.x= "Code", all.x = TRUE, incomparables = NA)
#Testresult have all columns of Monthlyresults, but I like to get only the result of every person at the startdate

Desired_result<- data.frame ("Code"=c(1,2,3), "Result_startdate"= c(8,20,5))
show(Desired_result)

1 个答案:

答案 0 :(得分:0)

这是一个dplyr / tidyr回答

bit 1