首页 > 解决方案 > 通过分组将列转换为子字段

问题描述

我想将以下数据从

        day fox hare wolf
1    Monday   4   20    2
2   Tuesday   4   25    1
3 Wednesday   4   30    3

        day attribute
1    Monday   fox=4,hare=20,wolf=2
2   Tuesday   fox=4,hare=25,wolf=1
3 Wednesday   fox=4,hare=30,wolf=3

我尝试使用 tidyr,但它似乎无处可去....

任何人,请指教。

数据操作参考

标签: rlogic

解决方案


两种可能的方法:

1)使用包:

library(dplyr)
library(tidyr)

df %>% 
  gather(k, v, 2:4) %>% 
  unite('attribute', k, v, sep = '=') %>% 
  group_by(day) %>% 
  summarise(attribute = paste0(attribute, collapse = ','))

2)使用包:

library(data.table)

melt(setDT(df), id = 1)[, attribute := paste(variable, value, sep = '=')
                        ][, .(attribute = paste0(attribute, collapse = ',')), by = day]

两者都给出(tidyverse显示的输出):

# A tibble: 3 x 2
  day       attribute           
  <chr>     <chr>               
1 Monday    fox=4,hare=20,wolf=2
2 Tuesday   fox=4,hare=25,wolf=1
3 Wednesday fox=4,hare=30,wolf=3

推荐阅读