Imaginez que j'ai ce dataframe:

A    B    C    D
1    2    3    4
5    7    6    8
9    10   11   12
13   15   14   16

Comment puis-je réorganiser les lignes des colonnes B et C juste lorsque B est supérieur à C?

Ma sortie souhaitée serait:

A   B    C   D
1   2    3   4
5   6    7   8
9   10   11  12
13  14   15  16

Merci!

r
0
Jeni 3 juin 2020 à 12:51

3 réponses

Meilleure réponse

Vous pouvez utiliser pmin et pmax:

transform(df, B = pmin(B, C), C = pmax(B, C))

#   A  B  C  D
#1  1  2  3  4
#2  5  6  7  8
#3  9 10 11 12
#4 13 14 15 16

Ou avec ifelse:

transform(df, B = ifelse(B > C, C, B), C = ifelse(C > B, C, B))
1
Ronak Shah 3 juin 2020 à 09:53

Utilisation de apply():

df[c("B", "C")] <- t(apply(df[c("B", "C")], 1, sort))

df
   A  B  C  D
1  1  2  3  4
2  5  6  7  8
3  9 10 11 12
4 13 14 15 16
0
sindri_baldur 3 juin 2020 à 09:57

NOUS pouvons aussi faire

library(dplyr)
df %>%
   mutate(B = pmin(B, C), C = pmax(B, C))
0
akrun 3 juin 2020 à 21:36