我喜欢合并两个数据集(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)
答案 0 :(得分:0)
这是一个dplyr / tidyr回答
bit 1