#r #tidyverse #dplyr
Вопрос:
Поэтому я хочу создать новую условную переменную, подобную приведенной ниже. В принципе, мне нужна переменная, которая обозначает любой положительный результат в списке других переменных. Я пытался использовать case_when, но безуспешно.
переменная 1 | переменная 2 | изменяемый 3 | Новая переменная |
---|---|---|---|
1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 |
0 | 0 | 0 | 0 |
Комментарии:
1.
(rowSums(DF) > 0)
Ответ №1:
Надеюсь, я правильно понял, что вы искали. Я создал new_var
переменную, основанную на наличии любого положительного значения в строке:
library(dplyr)
df %>%
rowwise() %>%
mutate(new_var = any(c_across(everything()) > 0, na.rm = TRUE))
# A tibble: 4 x 4
# Rowwise:
variable1 variable2 variable3 new_var
<int> <int> <int> <int>
1 1 0 0 1
2 0 0 1 1
3 0 1 1 1
4 0 0 0 0
Ответ №2:
использование cur_data()
в dplyr
library(dplyr)
df %>% mutate(new_v = (rowSums(cur_data()) > 0))
#> variable1 variable2 variable3 new_v
#> 1 1 0 0 1
#> 2 0 0 1 1
#> 3 0 1 1 1
#> 4 0 0 0 0
Создано 2021-06-08 пакетом reprex (v2.0.0)
Ответ №3:
Вы можете найти максимальное значение в каждой строке.
df$new_variable <- do.call(pmax, df)
df
# variable1 variable2 variable3 new_variable
#1 1 0 0 1
#2 0 0 1 1
#3 0 1 1 1
#4 0 0 0 0
данные
df <- structure(list(variable1 = c(1L, 0L, 0L, 0L), variable2 = c(0L,
0L, 1L, 0L), variable3 = c(0L, 1L, 1L, 0L), new_variable = c(1L,
1L, 1L, 0L)), row.names = c(NA, -4L), class = "data.frame")
Ответ №4:
Можно использовать Reduce
С |
в base R
так, что любое значение, не равное 0 будет true и 0 для ложного который выполняет поэлементное сравнение для каждой строки и возвращает true, если есть хотя бы один ненулевой, то мы сподвигнуть логично бинарные с
(Истина -> 1, значение false -> 0)
df$new_variable <- (Reduce(`|`, df))
данные
df <- structure(list(variable1 = c(1L, 0L, 0L, 0L), variable2 = c(0L,
0L, 1L, 0L), variable3 = c(0L, 1L, 1L, 0L)), row.names = c(NA,
-4L), class = "data.frame")
Ответ №5:
Вы можете использовать pmap_dbl
для применения оператора if_else , который проверяет, являются ли какие-либо значения var1
var2
или var3
положительными. Это решение работает независимо от того, каковы числовые значения вышеуказанных переменных.
library(tidyverse)
# reproduce your data
mydata <- tibble(
var1 = c(1,0,0,0),
var2 = c(0,0,1,0),
var3 = c(0,1,1,0)
)
mydata %>%
mutate(
newvar = pmap_dbl(list(var1, var2, var3), ~ if_else(any(c(..1, ..2, ..3) > 0), 1, 0))
)