首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套多个if-else

嵌套多个if-else
EN

Stack Overflow用户
提问于 2017-05-16 11:33:01
回答 2查看 118关注 0票数 0

我试图在R中编写一个带有嵌套if-else的函数,如何将列值设置为: data.frame:

输入

代码语言:javascript
复制
 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

预期产出

代码语言:javascript
复制
    df <- read.table(header = TRUE, text="Chr     start       end        num    seg.mean    seg.mean.1   seg.mean.2
    1   68580000    68640000    A8430    1      0     1 
    1   115900000   116260000   B8430    1      2     2
    1   173500000   173680000   C5      -2      -2   -1")



fun_cond <- function(x) { ifelse( x >= 1, 2,ifelse( x > 0 & x < 1, 1),ifelse( x <= 1, 2,ifelse( x < 0 & x > -1, -1)))}
new_df[5:length(df)] <- lapply(new_df[5:length(df)], fun_cond)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-16 11:52:02

我想你想要的是:

代码语言:javascript
复制
  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 & x > -1, -1, -2)))
  }

> fun_cond(x)
#[1] -2  2 -2 -2  2 -2  1  1 -1

试试吧..。

注意,x == 0-2。没有像您描述的那样的x <= 0 ...x >= 0 ...表达式。

如果您希望0为零,那么使用:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-05-16 11:53:53

试试R基中的cut

代码语言:javascript
复制
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

如果您想获得预期的输出:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44000327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档