【问题标题】:Conditionally fill in a vector using the index of TRUE values in two other vectors使用其他两个向量中的 TRUE 值的索引有条件地填充向量
【发布时间】:2018-03-15 08:44:43
【问题描述】:

我有两个 TRUE/FALSE 值向量:

x1 <- c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
  FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
  TRUE, FALSE, FALSE, FALSE, FALSE, FALSE)

x2 <- c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, FALSE, FALSE, FALSE, FALSE)

我想在x1x2 中获取TRUE 值的索引,并分别在这些索引中用0.75-0.25 填充新向量。所有其他单元格将是0

which(x1)
[1]  1  3  5 19

which(x2)    
[1]  2  4  6 20

因此,最终向量将在索引 1、3、5、19 中具有 0.75,在索引 2、4、6、20 中具有 -0.25

如何在 R 中实现这一点?

解决方案:

我找到了方法。

newx <- rep(0, length(x1))
newx [which(x1)] <- 0.75
newx [which(x2)] <- -0.25

【问题讨论】:

  • c(0, .75, -.25)[x1 + x2 * 2 + 1]
  • @DavidArenburg 这是一个不错的解决方案。 OP 多次更改了所需的输出,因此提供的解决方案可能不是最新的。

标签: r dataframe matrix vector


【解决方案1】:

如果x1 等于TRUE,我们分配.75。对于x1 不是TRUE 的情况,我们查看x2 是否为TRUE 并赋值-.25。如果x1x2 等于FALSE,则赋值0

ifelse(x1, 0.75, ifelse(x2, -.25, 0))
#[1]  0.75 -0.25  0.75 -0.25  0.75 -0.25  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.75 -0.25  0.00  0.00  0.00  0.00

【讨论】:

  • 虽然您的代码 sn-p 可能会解决问题,但您应该描述您的代码的目的是什么(它如何解决问题)。此外,您可能需要检查stackoverflow.com/help/how-to-answer
  • 两个注意事项:1)isTRUE(x1)比你使用的比较好; 2) 如果x1 等于TRUE 那么你根本不需要比较,ifelse(x1, 0.75, etc) 就可以了。
【解决方案2】:

这应该可行

x1_number <- ifelse(x1 == TRUE, yes = 0.75, no = 0)
x2_number <- ifelse(x2 == TRUE, yes = -1, no = 0)

df <- data.frame(your_column_name = x1_number + x2_number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2013-05-27
    • 2017-01-08
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多