J'ai des données qui ressemblent à ceci. Pour Par exemple, cela n'est pas satisfait de la ligne 5, où Petr Yan a remporté le combat mais il est dans J'ai besoin de toutes les lignes avec le gagnant sur ci-joint est un échantillon de mes données: p> Merci beaucoup :) p> p> r_fighter code>, je veux
r_fighter code> avoir les combattants qui sont définis dans la colonne gagnante. P>
B_fighter code>. En outre, j'aurais besoin
r_kd code> et
b_kd code> à échanger pour la ligne 5 et
r_sig_str code> et
b_sig_str code>. J'ai beaucoup plus de colonnes avec
r _ code> et
b _ code> les attributs de colonne et en auriez besoin de toutes les transmises. P>
b_fighter code> commuté. p>
3 Réponses :
Vous pouvez utiliser le package Dans votre cas, vous pouvez utiliser quelque chose comme: P> dplyr code> dans r, qui a de nombreuses fonctions pour remodeler les données.
library(dplyr)
mydata %>%
mutate(R_fighter_new = winner,
B_fighter_new = if_else(R_fighter == winner, B_fighter, R_fighter),
R_KD_new = if_else(R_fighter == winner, R_KD, B_KD),
B_KD_new = if_else(R_fighter == winner, B_KD, R_KD)) %>%
select(R_fighter = R_fighter_new, B_fighter = B_fighter_new, R_KD = R_KD_new, B_KD = B_KD_new, winner)
Nous pouvons utiliser cas_quive code> dans
dplyr code>
Vous pouvez essayer quelque chose comme celui-ci avec plusieurs colonnes à échanger. Tout d'abord, ajoutez une colonne de numéro de correspondance pour chaque ligne. Ensuite, pivot_longer code> Vous avez donc une seule colonne pour R vs. B. Cette colonne serait échangée en fonction des valeurs de combattant et gagnantes. Ensuite, pour remettre au format élargi d'origine, vous pouvez utiliser
pivot_wider code>. Notez que
pivot_wider code> mettra la "valeur" devant la sortie car il contient plusieurs valeurs (R et B ont été déplacés vers la fin).
library(tidyverse)
df %>%
mutate(match_no = row_number()) %>%
pivot_longer(cols = R_fighter:B_SIG_STR., names_to = c("R_vs_B", ".value"), names_pattern = "(R|B)_(\\w+)") %>%
mutate(R_vs_B = case_when(R_vs_B == "B" & fighter == winner ~ "R",
R_vs_B == "R" & fighter != winner ~ "B",
TRUE ~ R_vs_B)) %>%
pivot_wider(id_cols = c(match_no, winner, win_by, weight), names_from = R_vs_B, values_from = fighter:SIG_STR)