我无法根据同一数据集中的另一列添加一个具有该值的列。
以下是我正在使用的示例:
+----+------+------------+ | id | type | date | +----+------+------------+ | 1 | a | 2017-08-01 | | 1 | b | 2017-08-05 | | 2 | a | 2017-08-01 | | 3 | c | 2017-08-01 | | 4 | a | 2017-08-02 | | 5 | a | 2017-08-03 | | 5 | b | 2017-08-04 | +----+------+------------+
我的目标是创建一个a_date
列,其中所有适用行的日期是type
为a
时的日期。像这样:
+----+------+------------+------------+ | id | type | date | a_date | +----+------+------------+------------+ | 1 | a | 2017-08-01 | 2017-08-01 | | 1 | b | 2017-08-05 | 2017-08-01 | | 2 | a | 2017-08-01 | 2017-08-01 | | 3 | c | 2017-08-01 | | | 4 | a | 2017-08-02 | 2017-08-02 | | 5 | a | 2017-08-03 | 2017-08-03 | | 5 | b | 2017-08-04 | 2017-08-03 | +----+------+------------+------------+
现在在R中执行此操作我创建了一个数据表,并尝试使用group by并使用我用于计算的临时列:
test <-data.table(id = c(1,1,2,3,4,5,5), type = c("a","b","a","c","a","a","b"),
date = c("2017-08-01", "2017-08-05", "2017-08-01",
"2017-08-01", "2017-08-02", "2017-08-03", "2017-08-04"))
test[type == "a",temp_date := date]
test[, a_date := min(temp_date), by = c("id")]
然而,我最终得到的完全不同。我试图将这些表分开,我只有id
和date
的表,并进行如下合并:
test <- merge(test, ids, by.x=id, by.y=id)
这也产生了不希望的结果,并且与初始“测试”表的长度不同。 (我已尝试过all.x
选项)
我实际处理的数据集大约有2000万行,并且只是通过加载它使我们的服务器非常接近其限制,因此使用合并或具有表的多个副本也不是真正的选项。
这是一个使用for循环并有第二个表的工作版本:
ids <- test[!is.na(temp_date),list(id, temp_date)]
for (i in ids[,id]){
test[id == i, create_date := ids[id == i, temp_date]]
}
我不能使用这种方法,因为我真的受限于RAM而且这个表每天都在变大。所以我们的目标是使用单个data.table。
答案 0 :(得分:1)
如果每个Weak
只包含一行类型为id
的行,则可以执行以下操作:
a
答案 1 :(得分:1)
select varchar_format(current timestamp, 'MM/DD/YYYY') from sysibm.sysdummy1 ;
能做到这一点吗?
first(temp_date)