【发布时间】:2016-10-06 03:32:12
【问题描述】:
我喜欢合并两个数据集(Generaldata、monthlyresults),但同时应该满足另一个条件(Startdate=colnames_of_monthlyresults)。
示例(请参阅问题末尾的代码):
一般数据列:代码;开始日期(例如 201601)
Code: 1,2,3
Startdate: 201601, 201511, 201512
Monthlyresults 列:代码;结果201201(例如5%);结果201202; ... ;结果2011604
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 年内每个月的结果),但我只对每个人在开始日期(以及稍后结束日期)的结果感兴趣。 我怎么能做到这一点?
我尝试将这两个条件都包含在合并函数的 by= 元素中,但问题是我只需要引用结果数据集中的列名而不是行条目。 我也用 ifelse 函数尝试过,但是我遇到了格式不一样的问题。 startdate 列(“201601”)的条目不等于列名(“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)
【问题讨论】:
-
请展示一些可重现的例子和预期的输出
-
@akrun:感谢您的提示。我添加了一个带有数字的示例。第 1 个人从 2016 年 1 月开始,值为 8。
-
请查看at this link,了解如何创建可重现的示例。
-
@Sotos:感谢您提供有用的链接(我是 stackoverflow 的新手)。我在问题的末尾添加了一个可重现示例的 R 代码。