【发布时间】:2017-09-03 18:32:38
【问题描述】:
我想将两组单独的列收集到两个键值对中。以下是一些示例数据:
library(dplyr)
library(tidyr)
ID = c(1:5)
measure1 = c(1:5)
measure2 = c(6:10)
letter1 = c("a", "b", "c", "d", "e")
letter2 = c("f", "g", "h", "i", "j")
df = data.frame(ID, measure1, measure2, letter1, letter2)
df = tbl_df(df)
df$letter1 <- as.character(df$letter1)
df$letter2 <- as.character(df$letter2)
我希望两个度量列(measure1 和 measure2)的值位于一个列中,旁边有一个键列(键值对)。我也希望 letter1 和 letter2 也一样。我想我可以使用 select() 创建两个不同的数据集,在两个数据集上分别使用 collect 然后加入(这有效):
df_measure = df %>%
select(ID, measure1, measure2) %>%
gather(measure_time, measure, -ID) %>%
mutate(id.extra = c(1:10))
df_letter = df %>%
select(ID, letter1, letter2) %>%
gather(letter_time, letter, -ID) %>%
mutate(id.extra = c(1:10))
df_long = df_measure %>%
left_join(df_letter, by = "id.extra")
所以这非常有效(在这种情况下),但我想这可以更优雅地完成(没有分裂或创建'id.extra'之类的东西)。所以请解释一下!
【问题讨论】:
标签: r reshape tidyr keyvaluepair