【发布时间】:2017-05-23 11:47:23
【问题描述】:
我有关于重复推荐的数据,每个后续推荐(每个案例)都在它自己的列中。这些列的数量会随着每次运行的分析而改变,所以我需要脚本来解决这个问题。
然后我需要创建一个新列来计算第一列和第二列/第二列和第三列(依此类推)之间的日期差异,并将其作为整数返回。
我几乎已经完成了所有的工作,但是当我尝试抽象 data.frame 选择时,我无处可去。
for(i in 1:max.reref){
old <- paste(sprintf("reref_%03d",i))
new <- sprintf("reref_%03d",i+1)
colname <- paste("DateDif", i,i+1,sep="")
dataset[,colname] <- as.integer(as.Date(dataset[,c(old)]) - as.Date(dataset[,c(new)]))
}
我已经通过以下方式尝试了最后一行,但没有成功:
dataset[,colname] <- as.integer(as.Date(dataset[,old]) - as.Date(dataset[,new]))
dataset[,colname] <- as.integer(as.Date(dataset[,paste(old)]) - as.Date(dataset[,paste(new)]))
dataset[,colname] <- as.integer(as.Date(dataset$old) - as.Date(dataset$new))
没有成功。
问题似乎是,当变量(存储列名)输入到列选择器([] 或 $)中时,它被输出为列名,而不是列本身。
显然有一种方法可以做到这一点,但不是显而易见的。
**编辑:** 有人要求我添加数据的头部,不幸的是它有 246 个变量的宽度并且是敏感数据,所以我将给出与这个问题相关的变量示例。
id_a RefDate1 RefDate2 RefDate3
1 3229.396 2007-09-20 2015-07-12 2000-06-18
2 4579.532 2004-12-06 2000-06-22 2002-02-07
3 917.971 2007-12-05 2012-02-16 2016-04-29
4 4537.704 2007-03-30 2006-09-27 2006-03-28
5 6599.104 2010-06-06 2017-03-31 2015-08-23
另一个问题是max.reref 指的是什么,这是此数据集的引用数(例如需要受函数/循环影响的日期列)。
我希望这会有所帮助。
【问题讨论】:
-
请同时添加
head(dataset) -
另外请提供
max.reref。 -
您使用的是
data.table包中的 data.tables 吗?您对这个软件包的评估是正确的。在这种情况下,您需要在每个dataset[...]调用中添加with=FALSE参数。
标签: r calculated-columns abstraction