我想确定一行中的所有值是否为0,如果是,则返回0,否则返回非0行中的最小值。例如:
dat <- data.frame(x = c(0,0,0), y = c(0,1,0), z = c(0,0,2))
在这里,我希望函数返回向量(0,1,2,)。我尝试过类似的东西,但它没有到达那里:
apply(dat,1, function(x) ifelse(x==0, 0, min(x)[x!=0]))
任何和所有的想法都赞赏。
答案 0 :(得分:1)
你可以尝试
With xlApp.Workbooks("JDE1.xlsx").Sheets("TempHours")
.Range(.Cells(2, 18), .Cells(.Cells(ws.Rows.Count, 1).End(xlUp).Row, 18)).Value = Batch
End With
或者不更改原始数据集
indx <- !!rowSums(dat!=0)
is.na(dat[indx,]) <- dat[indx,]==0
do.call(pmin, c(dat, na.rm=TRUE))
#[1] 0 1 2
答案 1 :(得分:1)
或者你可以改变你所做的:
apply(dat,1, function(x) ifelse(sum(x)==0, 0, min(x[x!=0])))
[1] 0 1 2