1
votes

Lorsqu'une certaine valeur dans une colonne, une nouvelle valeur dans une nouvelle colonne

En fonction d'une valeur dans une colonne, je veux une valeur dans une nouvelle colonne. Lors de la visite 1, je veux 7 dans la colonne "nouveau", lors de la visite 2 je veux 8 dans la colonne "nouveau" et lors de la visite 3 je veux 9 dans la colonne "nouveau".

df %>%mutate(new=(visit==2))

    id visit trt   new
1 1001     1   A FALSE
2 1001     2   B  TRUE
3 1001     3   C FALSE
4 1002     1   A FALSE
5 1002     2   B  TRUE
6 1002     3   C FALSE
7 1003     1   A FALSE
8 1003     2   B  TRUE
9 1003     3   C FALSE

I a obtenu son loin mais maintenant je ne sais pas comment continuer. Quelqu'un at-il des conseils à donner? Merci!

id <- rep(1001:1003, each=3)
visit <- rep(1:3,3)
trt <- rep(c("A","B","C"),3)
df <- data.frame(id,visit,trt)

    id visit  trt
1 1001     1   A
2 1001     2   B
3 1001     3   C
4 1002     1   A
5 1002     2   B
6 1002     3   C
7 1003     1   A
8 1003     2   B
9 1003     3   C

I want it to look like:
    id  visit trt new
1 1001     1   A   7
2 1001     2   B   8
3 1001     3   C   9
4 1002     1   A   7
5 1002     2   B   8
6 1002     3   C   9
7 1003     1   A   7
8 1003     2   B   8
9 1003     3   C   9

r

0 commentaires

3 Réponses :


1
votes

Si vos nombres sont 1, 2, 3 et sont dans l'ordre comme indiqué, vous pouvez simplement ajouter 6 à votre colonne visite

library(dplyr)
df %>%
  mutate(new  =case_when(visit == 1 ~ 7, 
                         visit == 2 ~ 8, 
                         visit == 3 ~9, 
                         TRUE ~NA_real_))

Si vous le pouvez ' t trouver une relation pour mettre à jour les valeurs que vous pouvez utiliser case_when

df$new <- df$visit + 6


0 commentaires

2
votes

Il semble que vous ayez juste besoin d'ajouter 6 à la ligne visit?

> df %>% mutate(new=visit+6)
    id visit trt new
1 1001     1   A   7
2 1001     2   B   8
3 1001     3   C   9
4 1002     1   A   7
5 1002     2   B   8
6 1002     3   C   9
7 1003     1   A   7
8 1003     2   B   8
9 1003     3   C   9


0 commentaires

2
votes

Si vous cherchez une réponse qui fonctionne dans des situations génériques:

require(dplyr)

df = df %>% 
  dplyr::mutate(new = case_when(.$visit == 1 ~ 7,
                                .$visit == 2 ~ 8,
                                .$visit == 3 ~ 9))

Faites-moi savoir si c'est ce que vous cherchiez.


0 commentaires