我正在尝试对数据使用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
感谢您的帮助。
答案 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))