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[…]中更改到所需的任何内容。