【问题标题】:How to encode top 5 values of a column [duplicate]如何编码列的前5个值[重复]
【发布时间】:2020-02-12 08:12:35
【问题描述】:

我想在下面的数据框中对“代码”列的前 5 个出现/频率值进行编码:

ID | Code
1  | A
2  | A
3  | A
4  | F
5  | F
6  | C
7  | C
8  | E
9  | E
10 | D
10 | D
11 | B
12 | G
13 | H

结果应该是这样的:

ID | A | F | C | E | D |
1  | 1 | 0 | 0 | 0 | 0 | 
2  | 1 | 0 | 0 | 0 | 0 |
3  | 1 | 0 | 0 | 0 | 0 |
4  | 0 | 1 | 0 | 0 | 0 |
5  | 0 | 1 | 0 | 0 | 0 |
6  | 0 | 0 | 1 | 0 | 0 |
7  | 0 | 0 | 1 | 0 | 0 |
8  | 0 | 0 | 0 | 1 | 0 |
9  | 0 | 0 | 0 | 1 | 0 |
10 | 0 | 0 | 0 | 0 | 1 |
11 | 0 | 0 | 0 | 0 | 0 |
12 | 0 | 0 | 0 | 0 | 0 |
13 | 0 | 0 | 0 | 0 | 0 |

如何在 R 中使用 top_n 和 dcast 函数?或 dplyr。

【问题讨论】:

    标签: r dplyr reshape2


    【解决方案1】:

    这是一个基本解决方案

    as.matrix(table(df$ID,df$Code))[,names(sort(table(df$Code),decreasing=T)[1:5])]
    
         A C D E F
      1  1 0 0 0 0
      2  1 0 0 0 0
      3  1 0 0 0 0
      4  0 0 0 0 1
      5  0 0 0 0 1
      6  0 1 0 0 0
      7  0 1 0 0 0
      8  0 0 0 1 0
      9  0 0 0 1 0
      10 0 0 2 0 0
      11 0 0 0 0 0
      12 0 0 0 0 0
      13 0 0 0 0 0
    

    【讨论】:

    • 这不会对变量进行虚拟化,而是对实例进行计数。例如查看ID = 10 的输出 Vs OPs 输出
    • @Sotos 是的,简单的修改,我们可以将所有大于 1 的值替换为 1。
    • 你的意思是1.....
    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多