将数据帧转换为 r 中的二进制特征

convert dataframe to binary features in r

我有一个数据框:

参与者 <- c(A, A, A, B, C, C)

答案 <- c(alpha、beta、gamma、beta、beta、gamma)

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

'answers' 专栏包含的内容远不止这一小集。

如何将其变成如下二进制特征:

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

我的猜测是我还必须获得 'answers' 和 'participants' 的水平?

但我不确定下一步该怎么做。谢谢!

如果原始数据是'df1',创建1s的列后使用complete

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))

在基础 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

以上的排序方式与您的 table 不同。为此,您可以这样做:

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