Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用聚合值替换data.table中的值_R_Data.table - Fatal编程技术网

R 用聚合值替换data.table中的值

R 用聚合值替换data.table中的值,r,data.table,R,Data.table,我想从data.table计算一个聚合值,并用它替换原始值。我尝试了以下方法 库(data.table) (DT根据您的数据,这可能更有效,并明确地命名列: 库(data.table) DT 2:b2 x新值 #>3:c3 x新值 #>4:1 x新值 #>5:b2 x新值 #>6:c3 x新值 #>7:1 x新值 #>8:b2 x新值 #>9:c3 x新值 编辑: 根据后续问题,可通过引用进行更改,例如,直接实现如下操作: 库(data.table) DT 1:A 1 x A #>2:b2xb

我想从
data.table
计算一个聚合值,并用它替换原始值。我尝试了以下方法

库(data.table)

(DT根据您的数据,这可能更有效,并明确地命名列:

库(data.table)
DT 2:b2 x新值
#>3:c3 x新值
#>4:1 x新值
#>5:b2 x新值
#>6:c3 x新值
#>7:1 x新值
#>8:b2 x新值
#>9:c3 x新值
编辑: 根据后续问题,可通过引用进行更改,例如,直接实现如下操作:

库(data.table)
DT 1:A 1 x A
#>2:b2xb
#>3:c3xc
#>4:A 1 x d
#>5:b2xe
#>6:c3xf
#>7:A 1 x g
#>8:b2xh
#>9:c3xi

由(v0.3.0)

于2020年4月24日创建,具体取决于您的数据,这可能会更有效,并明确列的名称:

库(data.table)
DT 2:b2 x新值
#>3:c3 x新值
#>4:1 x新值
#>5:b2 x新值
#>6:c3 x新值
#>7:1 x新值
#>8:b2 x新值
#>9:c3 x新值
编辑: 根据后续问题,可通过引用进行更改,例如,直接实现如下操作:

库(data.table)
DT 1:A 1 x A
#>2:b2xb
#>3:c3xc
#>4:A 1 x d
#>5:b2xe
#>6:c3xf
#>7:A 1 x g
#>8:b2xh
#>9:c3xi

由(v0.3.0)

创建于2020-04-24,通过引用赋值将非常惯用。您为什么表示对该方法不感兴趣

DT[agg, on = "grp", val3 := val3]
或者,如果agg确实是
DT
的集合,那么它可能是:

DT[, val4 := min(val), by = grp]

      grp   val   val2      val3  val4
   <char> <int> <char>    <char> <int>
1:      A     1      x New Value     1
2:      B     2      x New Value     2
3:      C     3      x New Value     3
4:      A     4      y New Value     1
5:      B     5      y New Value     2
6:      C     6      y New Value     3
7:      A     7      z New Value     1
8:      B     8      z New Value     2
9:      C     9      z New Value     3
DT[,val4:=min(val),by=grp]
玻璃钢val 2 val 3 val 4
1:1 x新值1
2:b2 x新值2
3:c3 x新值3
4:4 y新值1
5:B 5 y新值2
6:C6Y新值3
7:7 z新值1
8:B8Z新值2
9:C9Z新值3

通过引用赋值将非常惯用。您为什么表示对这种方法不感兴趣

DT[agg, on = "grp", val3 := val3]
或者,如果agg确实是
DT
的集合,那么它可能是:

DT[, val4 := min(val), by = grp]

      grp   val   val2      val3  val4
   <char> <int> <char>    <char> <int>
1:      A     1      x New Value     1
2:      B     2      x New Value     2
3:      C     3      x New Value     3
4:      A     4      y New Value     1
5:      B     5      y New Value     2
6:      C     6      y New Value     3
7:      A     7      z New Value     1
8:      B     8      z New Value     2
9:      C     9      z New Value     3
DT[,val4:=min(val),by=grp]
玻璃钢val 2 val 3 val 4
1:1 x新值1
2:b2 x新值2
3:c3 x新值3
4:4 y新值1
5:B 5 y新值2
6:C6Y新值3
7:7 z新值1
8:B8Z新值2
9:C9Z新值3

Nice,但正如我所说的,我希望避免通过引用进行更改。抱歉-我认为这适用于显式连接以前创建的agg data.table,而不是直接替换值(否则一开始就不创建它会更容易)。您能详细说明一下吗“否则一开始就不创建它会更容易)”?现在完全跳过
agg
是有意义的。我越想它,也许我真的应该通过引用来改变。我想我应该开始习惯这个想法(难以改变习惯).Nice,但如前所述,我希望避免通过引用进行更改。抱歉-我认为这适用于显式连接以前创建的agg data.table,而不是直接替换值(否则一开始就不创建该值会更容易)。能否详细说明“否则,一开始就不创建它会更容易些)“现在完全跳过
agg
是有意义的。我越想它,也许我真的应该通过引用来改变。我想我应该开始习惯这个想法(难以改变习惯)。可能类似于
agg[DT,on=(grp),mget(paste0(“I.”,names(DT)))]
。请参阅这些具有开创性的帖子:可能类似于
agg[DT,on=(grp),mget(paste0(“i.”,names(DT))]
。请参阅这些具有开创性的帖子:谢谢您的回答。但是,如果我没有弄错您的代码,我们将通过引用向原始数据表添加新列。我希望有一个数据表,其中原始值将替换为各自的聚合值,如下面的答案所示,但不使用by-ref语义。如果您不希望要修改原件,您可以执行
copy(DT)[,newval:=1]
。这是一个示例,您可以更改为
DT[…]中所需的任何内容
谢谢您的回答。但是如果我没有弄错您的代码,我们将通过引用向原始数据表中添加新列。我希望有一个数据表,其中原始值由相应的聚合值替换,如下面的答案所示,但不使用by ref语义。如果您不想修改原始值,可以复制(DT)[,newval:=1]
。这是为了说明,您可以在
DT[…]中更改到所需的任何内容。