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