我的df是这样的
df <- data.frame(t1 = c(10, 20, 30, 1, 0), t2 = c(30, 0, 40, 0, 0), t3 = c(10, 0, 3, 10, 0))
我想做的是找到
min
在 df
行但不是 0我愿意
df<- df%>% rowwise() %>%
do({
th <- c(.$t1, .$t2, .$t3,)
data.frame(., t_s_last = min(th[th > 0))
})
但它有效但不适用于包含大于 0 的行。
如果行中只有 0(第 5 行),如何使其返回 0?
最佳答案
我们可以使用 apply
与 if/else
健康)状况
apply(df, 1, function(x) if(all(x==0)) 0 else min(x[x> 0]))
或者另一个选项是
rowMins
来自 library(matrixStats)
.我们将数据集中的“0”值替换为 NA
, 使用 rowMins
与 na.rm=TRUE
,并将“Inf”值替换为 0。 library(matrixStats)
is.na(df) <- df==0
v1 <- rowMins(as.matrix(df), na.rm=TRUE)
v1[is.infinite(v1)] <- 0
v1
#[1] 10 20 3 1 0
我们也可以使用
if/else
内do
library(dplyr)
df %>%
rowwise() %>%
do({th <- unlist(.[.>0])
data.frame(., t_s_last = if(all(th==0)) 0 else min(th))})
# t1 t2 t3 t_s_last
#1 10 30 10 10
#2 20 0 0 20
#3 30 40 3 3
#4 1 0 10 1
#5 0 0 0 0
关于r - 找到向量中的最小值但没有 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32309445/