如果R中不为0,则提取帧行中的最小值

时间:2015-05-20 19:59:22

标签: r apply minimum

我想确定一行中的所有值是否为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]))

任何和所有的想法都赞赏。

2 个答案:

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