具有Ifelse条件的Cbind / Rbind

时间:2015-07-21 14:43:56

标签: r if-statement which cbind

以下是我正在使用的代码:

x <- c("Yes","No","No","Yes","Maybe")
y <- t(1:10)
z <- t(11:20)

rbind.data.frame(ifelse(x == "Yes",y,z))

这会产生

    X1L X12L X13L X4L X15L
1   1   12   13   4   15

期望的结果是:

x
1   Yes   1    2    3    4    5    6    7    8    9    10
2    No   11   12   13   14   15   16   17   18   19    20
3    No   11   12   13   14   15   16   17   18   19    20
4   Yes   1    2    3    4    5    6    7    8    9    10
5 Maybe   11   12   13   14   15   16   17   18   19    20

我在想我可以在rbind.data.frame()或cbind.data.frame()函数中使用ifelse语句。因此,如果x == "Yes"那么将与矢量“y”组合。如所需输出的第一行所示。反过来,如果x!="Yes"那么它将与矢量“z”组合。我该怎么做呢我也想过可能使用which()函数进行索引但是我想不出如何使用它。

更新另一个问题

以下是我正在使用的代码:

    a <- c(1,0,1,0,0,0,0)
    b <- 1:7 

    t(sapply(a, function(test) if(test==0) b else 0))

Which produces 

        [,1] [,2]      [,3] [,4]      [,5]      [,6]      [,7]     
    [1,] 0    Integer,7 0    Integer,7 Integer,7 Integer,7 Integer,7

你们有人可以解释一下吗?下面的代码有效,但我想知道为什么sapply函数不起作用。另外,我如何保存下面创建的矩阵?

`row.names<-`(t(t(rbind(b,0))[,(a!='1')+1L]),x) 

回答我最近的问题

要使sapply函数起作用,它需要else语句中的输入为vector,

        a <- c(1,0,1,0,0,0,0)
        b <- 1:7 
        c <- rep(0, times = length(a))
        t(sapply(a, function(test) if(test==0) b else c))

现在这会产生正确的输出。

1 个答案:

答案 0 :(得分:5)

尝试

git-rev-parse

或者

 t(sapply(x, function(x) if(x=='Yes') y else z))