2 votes

Comment échantillonner une cellule dans une des deux colonnes ?

Je voudrais définir une nouvelle colonne dans mon cadre de données. Cette nouvelle colonne prend une valeur dans l'une des deux autres colonnes. Une cellule donnée de la nouvelle.colonne ne doit échantillonner les cellules des autres colonnes que si celles-ci se trouvent sur la même ligne.

Ce que je veux :

first.column second.column new.column
---------------------------------------
a b a
c d d

Ici, nous échantillonnons first.column y second.column pour définir la nouvelle colonne. Nous avons choisi au hasard a de la première ligne et d de la deuxième rangée.

Voici ce que j'ai essayé jusqu'à présent :

set.seed(1)
first = sample(c('a', 'c'), 2)
second = sample(c('b', 'd'), 2)
my.tibble = tibble(first, second)

my.tibble = my.tibble %>% 
  mutate(
    third = sample(c(first, second), 1)
  )

my.tibble
# A tibble: 2 x 3
# first second third
# <chr> <chr>  <chr>
# 1 a     b      b    
# 2 c     d      b    

On dirait que j'ai échantillonné la deuxième rangée deux fois.

3voto

Patrik_P Points 2274

Vous pouvez demander sample en ligne et attribue le résultat à une nouvelle colonne

df <- data.frame(col1 = c("a", "b", "c"), col2 = c("r", "t", "i"), col3 = c("w", "j", "d"))
within(df, newcol <- apply(df, 1, sample, 1))
#  col1 col2 col3 newcol
#1    a    r    w      a
#2    b    t    j      t
#3    c    i    d      d

1voto

Ronak Shah Points 24715

Si vous voulez rester avec tidyverse nous pouvons utiliser map2_chr si vous avez deux colonnes

library(tidyverse)
my.tibble %>%  mutate(third = map2_chr(first, second, ~sample(c(.x, .y), 1)))

# A tibble: 2 x 3
#  first second third
#  <chr> <chr>  <chr>
#1   a     d      a    
#2   c     b      c    

Ou plus généralement, pour de nombreuses colonnes, utilisez pmap_chr

my.tibble %>%  mutate(third = pmap_chr(., ~sample(c(...), 1)))

0voto

akrun Points 148302

Nous pouvons utiliser base R con Map

my.tibble$third <- unlist(Map(function(x, y) sample(c(x, y), 1), 
         my.tibble$first, my.tibble$second))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X