【问题标题】:R Tidyverse - Identify proportion of select columns meeting criteriaR Tidyverse - 确定符合标准的选择列的比例
【发布时间】:2020-04-17 15:55:13
【问题描述】:

我有这样的数据:

x1 = seq(0, 2, length=5)
x2 = seq(1, 2, length=5)
x3 = seq(0, 1, length=5)
df = data.frame(rbind(x1,x2,x3))

我想获取值小于 1 的特定列(基于名称)的比例。以下选择名称中包含“x”的变量,并对列中的值求和。

df <- df %>% 
  mutate(sumVar = rowSums(select(., contains("x")), na.rm = TRUE))

有没有办法在这个设置中包含 ifelse 逻辑来确定值

【问题讨论】:

    标签: r tidyverse contains dplyr rowsum


    【解决方案1】:

    你可以在条件下使用rowMeans()

    library(dplyr)
    
    df %>% 
      mutate(propVar = rowMeans(select(., contains("x")) < 1))
    
       x1   x2   x3   propVar
    1 0.0 1.00 0.00 0.6666667
    2 0.5 1.25 0.25 0.6666667
    3 1.0 1.50 0.50 0.3333333
    4 1.5 1.75 0.75 0.3333333
    5 2.0 2.00 1.00 0.0000000
    

    【讨论】:

    • 作为后续,如果我只想计算 > 0 和 % mutate(propVar = rowMeans(select(., contains("x"))
    • 是的 - 尽管代码中有错字(&lt; 使用了两次)。 df %&gt;% mutate(propVar = rowMeans(select(., starts_with("X")) &gt; 0 &amp; select(., starts_with("X")) &lt; 1)).
    • 是的……知道了!感谢您的确认!
    【解决方案2】:

    我们可以在base R中使用rowMeans

    df$propVar <- rowMeans(df[startsWith(names(df), "x")]<1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多