在R中的数据框中将负值转换为零

时间:2015-12-18 09:20:01

标签: r

我在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

但是这个错误说明不存在不存在的行

5 个答案:

答案 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)

可能会有更高级或更紧凑的方式,但您可以applyvar列进行矢量化替换:

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