首页 > 解决方案 > R Tidyverse - 确定符合标准的选择列的比例

问题描述

我有这样的数据:

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 逻辑来确定值 < 1 的列的比例(而不是像我在这里计算总和)?我正在使用包含功能,因为我想跨大量列进行计算,这些列不一定按顺序排列,但名称中具有相同的模式。

标签: rtidyversecontainsdplyrrowsum

解决方案


您可以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

推荐阅读