R Tidyverse - определение доли выбранных столбцов, соответствующих критериям - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть такие данные:

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

Я хотел бы получить долю указанных c столбцов (на основе имени), которые имеют значение меньше 1. Следующие выбирают переменные которые содержат "x" в имени и суммы по значениям в столбцах.

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

Есть ли способ включить ifelse logi c в эту настройку, чтобы определить пропорцию столбцов со значениями <1 (в отличие от вычисления суммы, как у меня здесь)? Я использую функцию содержимого, поскольку хочу вычислить это по большому количеству столбцов, которые не обязательно расположены по порядку, но имеют одинаковый шаблон в своем имени. </p>

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Мы можем использовать rowMeans в base R

df$propVar <- rowMeans(df[startsWith(names(df), "x")]<1)
0 голосов
/ 17 апреля 2020

Вы можете использовать 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
...