【问题标题】:create dummy variables while aggregating in R在 R 中聚合时创建虚拟变量
【发布时间】:2018-09-16 10:57:09
【问题描述】:

我想在 R 中聚合数据框时创建虚​​拟变量。

dat <- read.table(textConnection('ID Score Info
1     1     A    1
2     1     A    10
3     1     B    7
4     2     C    8
5     2     B    9
6     2     B    1
7     3     B    7
8     3     C    8
9     3     C    3
10     3     A    2'))

基本上,我想按“ID”聚合并计算具有相同 ID 的行数,这很容易,但我还需要根据“行”列创建虚拟变量。如果 A/B/C 存在于同一 ID 中,则虚拟变量的值为 1,否则为 0。 例如,ID 2 没有 A,因此 ID 2 的 Score_A 为 0,而 Score_B 和 Score_C 为 1。

输出如下:

      ID  Count Score_A Score_B Score_C
1     1     3      1      1       0
2     2     3      0      1       1
3     3     4      1      1       1

任何帮助将不胜感激。

【问题讨论】:

  • Score_C 对于 ID 1 应为 0
  • 你是对的!修好了。
  • cbind(aggregate(Info ~ ID, dat, length), +!!table(dat$ID, dat$Score))
  • 这是使用基本函数@rawr 的绝佳替代方案

标签: r dataframe dplyr aggregate dummy-variable


【解决方案1】:

我们在按'ID'分组后创建一个频率列'Count',然后添加第二个分组'Score',summarise第一个值为'Count'和一列1,spread到“宽”格式

dat %>% 
    group_by(ID) %>%
    mutate(Count = n()) %>%
    group_by(Score = paste0("Score_", Score), add = TRUE) %>%
    summarise(Count = first(Count), n1 = 1)  %>%
    spread(Score, n1, fill = 0)
# A tibble: 3 x 5
# Groups: ID [3]
#     ID Count Score_A Score_B Score_C
#* <int> <int>   <dbl>   <dbl>   <dbl>
#1     1     3    1.00    1.00    0   
#2     2     3    0       1.00    1.00
#3     3     4    1.00    1.00    1.00

【讨论】:

  • 哇......这么多事情可以用“dplyr”包完成。非常感谢@akrun 的快速帮助!!
猜你喜欢
  • 2023-03-24
  • 2013-09-23
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2018-07-20
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多