当前位置: 首页 > 知识库问答 >
问题:

根据第二个数据框按组创建一个数据框中的日期序列

袁琪
2023-03-14

我有两个共享分组ID的数据帧。我希望根据另一个设置的条件在其中创建一个日期序列。MRE如下:

jdates <- structure(list(Group.1 = c(8, 9), x = structure(c(16674, 16661), class = "Date")), .Names = c("Group.1", "x"), row.names = c(NA, -2L), class = c("data.table", "data.frame"))

jtrying <- structure(list(id = c(8, 8, 8, 9, 9, 9), values1 = 1:6, values2 = 7:12), .Names = c("id", "values1", "values2"), row.names = c(NA, -6L), class = c("data.table", "data.frame"))

在这个例子中,我想在 jtrying 中创建一列日期,从 jdates 中的下一个日期开始(每个组 - 组中的 Group.1jdates 中,idjtrying 中)。

具有数据。表中,这些(可怕的)方法都不起作用:

jtrying[ , date := seq(jdates$x + 1, length.out=3, by = 1), by = jdates$Group.1]

jtrying[ , date := seq(jdates$x + 1, length.out=3, by = 1), by = id]

jtrying[ , date := lapply(.SD,(seq(jdates$x + 1, length.out=3, by = 1))), by = id]

jtrying[ , date := lapply(.SD,function(x) seq(jdates$x + 1, length.out=3, by = 1)), by = id]

我一直在尝试数据。表方法,因为它们被认为更快(而且实际数据相当大),但实际上,任何(合理的)方法都可以。

我的预期结果是一个看起来像这样的 data.frame:

 jtrying
   id values1 values2       date
1:  8       1       7 2015-08-28
2:  8       2       8 2015-08-29
3:  8       3       9 2015-08-30
4:  9       4      10 2015-08-15
5:  9       5      11 2015-08-16
6:  9       6      12 2015-08-17

共有1个答案

申高峰
2023-03-14

这是我会做的

jtrying[jdates, 
  date := seq(from=x+1, by=1, length.out=.N)
, on=c(id="Group.1"), by=.EACHI]

此语法X[Y, newcols:=..., on=c(Xcols=Ycols), by=. EACHI]工作原理如下:

    < li> X与< code>on中标识的列上的< code>Y合并。 < li> X为合并列的每个值单独构建其< code>newcol(即< code>by=)。每个)。
 类似资料:
  • 问题内容: 我有一个带有多个列以及一个日期列的数据框。日期格式为15年12月31日,我将其设置为日期时间对象。 我将datetime列设置为索引,并希望对数据框的每个月执行回归计算。 我相信实现此目的的方法是将数据框基于月份拆分为多个数据框,存储到数据框列表中,然后对列表中的每个数据框执行回归。 我使用过groupby可以按月成功拆分数据框,但是不确定如何正确地将groupby对象中的每个组转换为

  • 我有两个熊猫数据框 步骤1:根据df1中唯一的“val”在df2中创建列,如下所示: 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'c

  • 问题内容: 我有一个具有多个列和行的数据框 df1 。简单的例子: 我想创建一个空的数据框 df2, 然后再添加带有计算结果的新列。 目前,我的代码如下所示: …添加两个新列: 有没有更好/更安全/更快的方法呢?是否可以创建一个空的数据帧df2并仅从df1复制索引? 问题答案: 这将创建一个没有列但只有一个索引的DataFrame,并且它将与df1中的索引相同。

  • 我有两个pyspark数据帧 DF1 : df2: 我想向df1添加一个列Location_Id,从df2获取匹配的Id,如下所示: 我如何才能做到这一点?

  • 我有两个火花数据集,其中一个列的帐户和键,键列在数组的格式[key1, key2, key3...]和另一个数据集的两个列的帐户和键值是在json.帐户,{key:值,键,值...}。我需要更新第二个数据集中的值,如果键出现在第一个数据集中。 预期产出

  • 问题内容: 我有一个数据框 我有另一个数据框df2 我希望我的最终数据框看起来像: 即从一个数据框映射到另一个创建新列 问题答案: + 假设您的数据框已经在上排序,则第一次排序调用是多余的,在这种情况下,您可以删除它。 / 或者,显式创建映射。如果您以后要使用它,它将起作用。