以下是我需要的一个简单示例:
data <- data.table(x = c(10, -10, 20, -20, 100, -100),
y = c(10, -10, 120, -120, 100, -100),
z = c(10, -10, 100, -100, 30, -30))
data[x > 90 | x < -90, x:=0]
data[z > 90 | z < -90, z:=0]
这很好用,但我希望用更简单的版本替换最后两行,因为我的实际数据中有很多列(大约200个,其中我需要更新一下) 50)和很多行(大约200万,所以数据有点重)
如果这是重复的话,请道歉
答案 0 :(得分:4)
使用var stagingPlan = this.GetProcessingStatusEntryById(processingId);
var library = GetProcessingLibraryByXmlString(stagingPlan.StagingRefProcessingEngineLibrary.LibraryXml);
可能最简单,效率最高:
eval(parse(...))
但是,我可能会解散data.table:
cols <- c("x", "z")
for (col in cols)
eval(parse(text = sprintf("data[%s > 90 | %s < -90, %s := 0][]", col, col, col)))
# x y z
#1: 10 10 10
#2: -10 -10 -10
#3: 20 120 0
#4: -20 -120 0
#5: 0 100 30
#6: 0 -100 -30
答案 1 :(得分:1)
我们可以使用set
data.table
for(j in names(data)[c(1,3)]){
set(data, i = which(data[[j]]>90 |data[[j]] < -90), j = j, value = 0)
}
data
# x y z
#1: 10 10 10
#2: -10 -10 -10
#3: 20 120 0
#4: -20 -120 0
#5: 0 100 30
#6: 0 -100 -30
答案 2 :(得分:0)
您可以使用功能形式的参考更新进行更新:
数据[z> 90 | z <-90,':='(x = 0,z = 0)]
您可以查看更多信息:https://www.rdocumentation.org/packages/data.table/versions/1.12.8/topics/%3A%3D