【问题标题】:Turning factor variable into a list of binary variable per row (trial) in R [duplicate]将因子变量转换为R中每行(试用)的二进制变量列表[重复]
【发布时间】:2019-10-10 18:11:46
【问题描述】:

不久前,我发布了一个关于如何将因子 data.frame 转换为二进制(热编码)data.frame here 的问题。现在我试图找到循环试验(行)和二值化因子变量的最有效方法。一个最小的示例如下所示:

d = data.frame(
    Trial = c(1,2,3,4,5,6,7,8,9,10),
    Category = c('a','b','b','b','a','b','a','a','b','a')
)
d

   Trial Category
1      1        a
2      2        b
3      3        b
4      4        b
5      5        a
6      6        b
7      7        a
8      8        a
9      9        b
10    10        a

虽然我想得到这个:

   Trial  a  b
1      1  1  0
2      2  0  1
3      3  0  1
4      4  0  1
5      5  1  0
6      6  0  1
7      7  1  0
8      8  1  0
9      9  0  1
10    10  1  0

最有效的方法是什么?

【问题讨论】:

    标签: r binary-data


    【解决方案1】:

    这是pivot_wider 的选项。创建一列 1,然后应用 pivot_widernames_from 'Category' 和 values_from 新创建的列

    library(dplyr)
    library(tidyr)
    d %>%
      mutate(n = 1) %>%
      pivot_wider(names_from = Category, values_from = n, values_fill = list(n = 0))
    # A tibble: 10 x 3
    #   Trial     a     b
    #   <dbl> <dbl> <dbl>
    # 1     1     1     0
    # 2     2     0     1
    # 3     3     0     1
    # 4     4     0     1
    # 5     5     1     0
    # 6     6     0     1
    # 7     7     1     0
    # 8     8     1     0
    # 9     9     0     1
    #10    10     1     0
    

    有效的选择是data.table

    library(data.table)
    dcast(setDT(d), Trial ~ Category, length)
    

    也可以用base R完成

    table(d)
    

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多