r - Cbind/Rbind 与 ifelse 条件

标签 r if-statement 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

我在想我可以将 ifelse 语句与 rbind.data.frame() 或 cbind.data.frame() 函数一起使用。因此,如果 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 语句中的输入是一个向量,因此,

        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))

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

最佳答案

尝试

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

或者

 `row.names<-`(t(t(rbind(y,z))[,(x!='Yes')+1L]),x)

关于r - Cbind/Rbind 与 ifelse 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542285/

相关文章:

当用户输入无效字符时,C 程序不会结束

基于下拉菜单值的 Javascript if 语句

java - 如何检查数组是否有足够的位置来接受 Java 中数组的新值?

r - 按列快速串联数千个文件

r - 使用 R 中的模糊/近似字符串匹配合并两个数据框

r - 如何检查文件是否在R中被压缩

r - 用图例在R中绘制多个(时间)序列

r - 如何比浅拷贝更快地通过引用进行更新?

r - 将不同长度的列表组合成数据帧

r - 更快地填充 R 数据框中缺失的列