Je souhaite créer une nouvelle colonne z
basée sur les valeurs de x
et y
. Si x>y
, z=y
sinon z=x
.
x y
3 4
5 2
6 6
1 7
9 4
Sortie requise:
x y z
3 4 3
5 2 2
6 6 6
1 7 1
9 4 4
3 réponses
Vous pouvez utiliser ifelse
:
df$z <- with(df, ifelse(x > y, y, x))
#Or without with
#df$z <- ifelse(df$x > df$y, df$y, df$x)
df
# x y z
#1 3 4 3
#2 5 2 2
#3 6 6 6
#4 1 7 1
#5 9 4 4
Dans dplyr
, vous pouvez utiliser if_else
qui est le même que ci-dessus ou case_when
qui est utile lorsque vous devez lister plusieurs conditions.
library(dplyr)
df %>%
mutate(z = case_when(x > y ~ y,
TRUE ~x))
Similaire à une autre réponse mais utilisant data.table
et pmin
:
library(data.table)
dt <- data.table(x = c(3,5,6,1,9),
y = c(4,2,6,7,4))
dt[, z:= pmin(x,y)]
dt
# x y z
# 1: 3 4 3
# 2: 5 2 2
# 3: 6 6 6
# 4: 1 7 1
# 5: 9 4 4
La fonction pmin
renvoie les minima parallèles (https: / /www.rdocumentation.org/packages/mc2d/versions/0.1-17/topics/pmin)
Si je comprends bien, vous recherchez une valeur minimale sur plusieurs colonnes. Vous pouvez utiliser la fonction pmin :
library(dplyr)
df <- data.frame(x = c(3,5,6,1,9),
y = c(4,2,6,7,4))
df <- df %>% mutate(z = pmin(x, y))
Résultat:
> df
x y z
1 3 4 3
2 5 2 2
3 6 6 6
4 1 7 1
5 9 4 4
Il comptera la valeur minimale dans un bloc de données par ligne et simplifiera la syntaxe si vous souhaitez inclure plus de 2 colonnes:
df <- data.frame(x = c(3, 5, 6, 1, 9),
y = c(4, 2, 6, 7, 4),
a = c(2, 5, 7, 3, 3))
df <- df %>% mutate(z = pmin(x, y, a))
Résultat:
> df
x y a z
1 3 4 2 2
2 5 2 5 2
3 6 6 7 6
4 1 7 3 1
5 9 4 3 3
De nouvelles questions
r
R est un langage de programmation et un environnement logiciel libres et open source pour le calcul statistique, la bioinformatique, la visualisation et le calcul général. Veuillez fournir des exemples minimaux et reproductibles ainsi que le résultat souhaité. Utilisez dput () pour les données et spécifiez tous les packages non basiques avec des appels à library (). N'incorporez pas d'images pour les données ou le code, utilisez plutôt des blocs de code en retrait. Pour les questions relatives aux statistiques, utilisez https://stats.stackexchange.com.