I have this data table with two columns:
- gender - male or female
- score - between 0 and 100
I want create a new table with 2 columns:
- male
- female and the lines are the score
how can I do this in R?

I have this data table with two columns:
I want create a new table with 2 columns:
how can I do this in R?

 
    
     
    
    Up front: the rn column I add is to provide an "id" of sorts, where the results will have only one row per "id". There might be ways around it, but it really simplifies things, both in execution and in visualizing what is happening (when you look at the long and wide versions with rn still present). I remove the column in both answers ([,-1] and %>% select(-rn)) since it's just a transient column.
dat$rn <- ave(seq_len(nrow(dat)), dat$gender, FUN = seq_along)
reshape(dat, timevar = "gender", idvar = "rn", direction = "wide", v.names = "score")[,-1]
#   score.male score.female
# 1        100           90
# 3         80           98
# 5         75          100
library(dplyr)
library(tidyr) # pivot_wider
dat %>%
  group_by(gender) %>%
  mutate(rn = row_number()) %>%
  pivot_wider(rn, names_from = gender, values_from = score) %>%
  select(-rn)
# # A tibble: 3 x 2
#    male female
#   <int>  <int>
# 1   100     90
# 2    80     98
# 3    75    100
Data
dat <- structure(list(score = c(100L, 90L, 98L, 80L, 75L, 100L), gender = c("male", "female", "female", "male", "male", "female"), rn = c(1L, 1L, 2L, 2L, 3L, 3L)), row.names = c(NA, -6L), class = "data.frame")
 
    
    We can use unstack in base R
unstack(df1, score ~ gender)
  female male
1     90  100
2     98   80
3    100   75
df1 <- structure(list(score = c(100L, 90L, 98L, 80L, 75L, 100L), gender = c("male", 
"female", "female", "male", "male", "female")), class = "data.frame", row.names = c(NA, 
-6L))
