我试图用R中的嵌套if-else编写一个函数。如何转换data.frame,其中列的值设置为:
输入
nil
预期产出
df <- read.table(header = TRUE, text="Chr start end num seg.mean seg.mean.1 seg.mean.2
1 68580000 68640000 A8430 0.7000 0 0.1032
1 115900000 116260000 B8430 0.0039 2.7202 2.7202
1 173500000 173680000 C5 -1.7738 -2.0746 -0.2722")
condition:
x > 0 & x< 1 : 1
x >= 1 : 2
x < 0 & x > - 1 : -1
x <= -1 : -2
x = 0 : 0
答案 0 :(得分:1)
我认为你想要的是:
x == 0
尝试一下......
请注意,
-2
为x <= 0 ...
。没有您所描述的x >= 0 ...
或0
表达式。
如果您希望x = c(-1,1,0,0,1,-1,0.5,0.3, -0.4)
fun_cond(x)
fun_cond <- function(x){
ifelse(x >= 1, 2, ifelse(x < 1 & x > 0, 1, ifelse( x == 0, 0, ifelse(x < 0 & x > -1, -1, -2))))
}
> fun_cond(x)
#[1] -2 2 0 0 2 -2 1 1 -1
为零,请使用:
java.time.LocalTime
答案 1 :(得分:1)
在基地R中尝试cut
:
cols <- grep("seg.mean", names(df))
res <- sapply(cols, function(i)
cut(df[,i], breaks = c(-Inf, -1, 0, 1, Inf), labels = c(-2,-1,1,2)))
# to leave zeros untouched
res[df[cols]==0] <- 0
如果您想获得预期的输出:
df[cols] <- res
# Chr start end num seg.mean seg.mean.1 seg.mean.2
# 1 1 68580000 68640000 A8430 1 0 1
# 2 1 115900000 116260000 B8430 1 2 2
# 3 1 173500000 173680000 C5 -2 -2 -1