我在R中有一个数据框,我想将所有列(在ID之外)从负数转换为零
# file1.rb
puts "In file 1"
catch(:done) do
require 'file2' end
puts "Back in file 1"
# file2.rb
puts "In file 2"
throw :done
puts "Still in file 2" # Never gets called
我可以使用代码行转换所有列,如:
id1 id2 var1 var2 var3
-1 -1 0 -33 5
-1 -2 9 -10 -1
但我无法将其调整为只有一部分列。我试过了:
temp[temp < 0] <- 0
但是这个错误说明不存在不存在的行
答案 0 :(得分:10)
编辑你的变种
DB::connection($this->MongoSchemaName)->collection($this->InvoicesTable)->where('Type', 'PAYMENT')->where('ContactID', (int)$customer->ContactID)->sum(DB::raw('Total * CurrencyRate'));
答案 1 :(得分:5)
您可以尝试使用replace
:
> mydf[-c(1, 2)] <- replace(mydf[-c(1, 2)], mydf[-c(1, 2)] < 0, 0)
> mydf
id1 id2 var1 var2 var3
1 -1 -1 0 0 5
2 -1 -2 9 0 0
答案 2 :(得分:1)
我们可以使用data.table
setDT(d1)
for(j in grep('^var', names(d1))){
set(d1, i= which(d1[[j]]<0), j= j, value=0)
}
d1
# id1 id2 var1 var2 var3
# 1: -1 -1 0 0 5
# 2: -1 -2 9 0 0
答案 3 :(得分:0)
您可以使用public static T Deserialize<T>(string text)
{
using (MemoryStream stream = text.ToStream())
{
var serializer = new DataContractSerializer(typeof(T));
return (T)serializer.ReadObject(stream);
}
}
:
pmax
答案 4 :(得分:0)
可能会有更高级或更紧凑的方式,但您可以apply
向var
列进行矢量化替换:
mytable <- read.table(textConnection("
id1 id2 var1 var2 var3
-1 -1 0 -33 5
-1 -2 9 -10 -1"), header = TRUE)
mytable[, grep("^var", names(mytable))] <-
apply(mytable[, grep("^var", names(mytable))], 2, function(x) ifelse(x < 0, 0, x))
mytable
## id1 id2 var1 var2 var3
## 1 -1 -1 0 0 5
## 2 -1 -2 9 0 0