преобразование фрейма данных в двоичные объекты в r

#r #dataframe #data-conversion

Вопрос:

У меня есть фрейм данных:

участники

ответы

 participants answers
A            alpha
A            beta
A            gamma
B            beta
C            beta
C            gamma
 

Столбец «ответы» содержит гораздо больше, чем просто этот небольшой набор.

как мне превратить его в двоичные функции, такие как следующие:

 participant answers value
A           alpha   1
A           beta    1
A           gamma   1
B           alpha   0
B           beta    1
B           gamma   0
C           alpha   0
C           beta    1
C           gamma   1
 

Я предполагаю, что я тоже должен получить уровни «ответов» и «участников»?

Но я не уверен, как это сделать дальше. Спасибо!

Ответ №1:

В базе R вы могли бы сделать:

 data.frame(table(df1))
  participants answers Freq
1            A   alpha    1
2            B   alpha    0
3            C   alpha    0
4            A    beta    1
5            B    beta    1
6            C    beta    1
7            A   gamma    1
8            B   gamma    0
9            C   gamma    1
 

Все вышеперечисленное заказывается не так, как ваш стол. Чтобы сделать это, вы могли бы сделать:

 with(a<-data.frame(table(df1)), a[order(participants),])
  participants answers Freq
1            A   alpha    1
4            A    beta    1
7            A   gamma    1
2            B   alpha    0
5            B    beta    1
8            B   gamma    0
3            C   alpha    0
6            C    beta    1
9            C   gamma    1
 

Комментарии:

1. Спасибо! это очень полезно!

Ответ №2:

Если исходные данные «df1», используйте complete после создания столбца 1s

 library(tidyr)
library(dplyr)
df1 %>%
    mutate(value = 1) %>%
    complete(participants, answers, fill = list(value = 0))
 

-выход

 # A tibble: 9 × 3
  participants answers value
  <chr>        <chr>   <dbl>
1 A            alpha       1
2 A            beta        1
3 A            gamma       1
4 B            alpha       0
5 B            beta        1
6 B            gamma       0
7 C            alpha       0
8 C            beta        1
9 C            gamma       1
 

данные

 df1 <- structure(list(participants = c("A", "A", "A", "B", "C", "C"), 
    answers = c("alpha", "beta", "gamma", "beta", "beta", "gamma"
    )), class = "data.frame", row.names = c(NA, -6L))
 

Комментарии:

1. Спасибо! это очень полезно! Я никогда не знал, что существует «полная» функция!