如何在依赖列上使用收集

时间:2019-05-04 20:21:11

标签: r dplyr tidyverse data-analysis data-cleaning

我正在尝试对数据使用collect函数,但未提供所需的输出。

样本原始数据-

id  listen_A  listen_B  speak_A  speak_B  
 1     11        21        41       51
 2     12        22        42       52

必需的输出-

id  type  listen_value  speak_value
 1    A         11           41
 1    B         21           51
 2    A         12           42
 2    B         22           52

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

一种选择是将数据gather转换为“长”格式,然后将separate的“键”列_分为两列,然后spread返回至格式为“ key1”和“ val”列的“宽”格式

library(tidyverse)
df1 %>%
    gather(key, val, -id) %>%
    separate(key, into = c("key1", "type")) %>%
    spread(key1, val)
#  id type listen speak
#1  1    A     11    41
#2  1    B     21    51
#3  2    A     12    42
#4  2    B     22    52

或使用melt中的data.table,这可能需要多个measure patterns

library(data.table)
melt(setDT(df1), measure = patterns("listen", "speak"), 
       value.name = c("listen_value", "speak_value"))

数据

df1 <- structure(list(id = 1:2, listen_A = 11:12, listen_B = 21:22, 
speak_A = 41:42, speak_B = 51:52), class = "data.frame", 
 row.names = c(NA, -2L))