【问题标题】:Is there a way to create new var containing conditional value in R?有没有办法在 R 中创建包含条件值的新 var?
【发布时间】:2021-03-15 14:06:59
【问题描述】:

我是一个相对较新的 R 用户,一直在努力解决这个问题。

假设我有以下 df 和 5 个变量 a:e

year <- c(1990:1994)
a <- c(1, 0, 0, 0, 0)
b <- c(0, 1, 0, 0, 0)
c <- c(0, 0, 5, 1, 0)
d <- c(0, 0, 0, 1, 0)
e <- c(0, 2, 0, 0, 1)
df <- data.frame(year, a, b, c, d, e)

那么,如何创建一个新变量“f”,其中包含“值> 0”根据“年份”。

任何帮助将不胜感激!

已编辑:所需的输出是下面的 f 列

year a b c d e f
1990 1 0 0 0 0 1
1991 0 1 0 0 2 2
1992 0 0 5 0 0 1
1993 0 0 1 1 0 2
1994 0 2 0 0 1 2

【问题讨论】:

  • 能否请您显示此示例输入所需的输出?根据“年份”,我不知道您所说的 “value > 0”是什么意思。应该是值 > 0 的计数吗?或者值> 0的列名? (如果有超过 1 个值 > 0 会发生什么?)还是别的什么?
  • 嗨,是的,一个包含值计数 > 0 的新列。我已经编辑了我的帖子。

标签: r dplyr tidyr


【解决方案1】:

使用rowSums计算&gt; 0有多少个值,不包括第一列。

df$f = rowSums(df[-1] > 0)

df
#   year a b c d e f
# 1 1990 1 0 0 0 0 1
# 2 1991 0 1 0 0 2 2
# 3 1992 0 0 5 0 0 1
# 4 1993 0 0 1 1 0 2
# 5 1994 0 0 0 0 1 1

【讨论】:

  • 非常感谢!!看起来很简单!
  • 建议你复习一下 Base R 的向量函数:rowSums、rowMeans、colSums、colMeans。 RStudio 帮助:?rowSums 将向您显示信息。
  • 嗨@SteveM,感谢您的建议。我有另一个关于 {colSums} 的问题,我知道在上面的例子中,func 将计算指定列的总值。但是有没有办法分别计算 1990-1992 和 1993-1994 的 a、c 和 f 列的值?
【解决方案2】:

我们可以使用applysum

df$f <- apply(df[-1] > 0, 1, sum)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2020-03-23
    • 2022-08-16
    • 2022-01-18
    • 2016-09-06
    • 2013-08-22
    相关资源
    最近更新 更多