Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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,基本上是对这一点的扩展,因为我注意到,如果您再次进行子集设置,则不可能更改列的值 random.length <- sample(x = 15:30, size = 1) dt <- data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10,

基本上是对这一点的扩展,因为我注意到,如果您再次进行子集设置,则不可能更改列的值

random.length  <-  sample(x = 15:30, size = 1)
dt <- data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE)) 
set.seed(1)
dt[sample(.N,3), score :=9999]
set.seed(1)
dt[sample(.N,3),]
我想要实现的是,我可以更改某个列的值,该列是特定子集的一部分,并从该子集中随机选择。

dt[city==“New York”]
返回一个全新的对象,您正在通过引用对其进行更新。但这并不影响dt。i、 e

dt[expr, col := val] != dt[expr][, col := val]

第一个表达式更新
dt
,其中
expr
的计算结果为
TRUE
。第二个更新从
dt[expr]
返回的子集。除非您将结果赋回变量,否则无法返回结果。

除了上述所有建议之外,您还可以对索引进行采样(可以使用
哪个
函数计算):

dt[sample(which(city == "New York"), 1), score:=555L]
dt
#           city score
#  1:   Tel Aviv     8
#  2:  Amsterdam     3
#  3:  Cape Town    10
#  4:   New York     1
#  5:  Cape Town    10
#  6: Pittsburgh     2
#  7: Pittsburgh     8
#  8:  Amsterdam    10
#  9:  Amsterdam     8
# 10:  Amsterdam     4
# 11:   Tel Aviv     7
# 12:  Amsterdam     2
# 13: Pittsburgh     1
# 14:  Amsterdam     3
# 15: Pittsburgh     2
# 16:   New York     7
# 17:   Tel Aviv    10
# 18:   New York    10
# 19:  Cape Town     1
# 20:  Amsterdam     7
# 21:  Amsterdam     3
# 22:   New York   555
# 23:  Cape Town     6
# 24:   New York     1
# 25:   Tel Aviv    10
#           city score

“对于三个随机选择的城市”--您选择的是行,而不是城市。顺便说一句,你的
set.seed
来得太晚了(在使用
sample
之后)。set.seed()只是为了让人更容易看到,在第一种情况下分数会发生变化,人们可以直接检查不同的分数,而在第二种情况下则不会发生任何变化。可以做
dt[sample(dt[,.I[city==“New York”],3),分数:=5555555]
也许吧。或者,如果你想覆盖每个城市中的3个随机OB,你可以做
dt[dt[,.I[sample(.N,3)],by=city]$V1,分数:=55555]
Ok,这就是我所怀疑的,谢谢你的快速回答。我发现:=的赋值有一点奇怪,那就是它根本没有给你一个有意义的错误或错误消息。特别是在这种情况下,实际上分配任何东西都没有意义,这有点奇怪,一开始它似乎已经成功了,或者?在这些情况下,是否可能以某种方式显示错误?
dt[sample(which(city == "New York"), 1), score:=555L]
dt
#           city score
#  1:   Tel Aviv     8
#  2:  Amsterdam     3
#  3:  Cape Town    10
#  4:   New York     1
#  5:  Cape Town    10
#  6: Pittsburgh     2
#  7: Pittsburgh     8
#  8:  Amsterdam    10
#  9:  Amsterdam     8
# 10:  Amsterdam     4
# 11:   Tel Aviv     7
# 12:  Amsterdam     2
# 13: Pittsburgh     1
# 14:  Amsterdam     3
# 15: Pittsburgh     2
# 16:   New York     7
# 17:   Tel Aviv    10
# 18:   New York    10
# 19:  Cape Town     1
# 20:  Amsterdam     7
# 21:  Amsterdam     3
# 22:   New York   555
# 23:  Cape Town     6
# 24:   New York     1
# 25:   Tel Aviv    10
#           city score