我想将两个独立的列组收集到两个键值对中。下面是一些示例性数据:使用gather()将两个(或更多)列组收集到两个(或更多)键值对中
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)
我希望两个量度列(措施1和measure2)的值是在一列中具有键柱旁边(键 - 值对)。我也希望letter1和letter2一样。我想,我可以使用select()创建两个不同的数据集,用两个数据集seperately收集,然后加入(这工作):
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'之类的东西),所以请说明一下吧!
的聚拢()函数不能做到这一点? –
@BenjaminTelkamp,不能做什么?我在第一种方法中使用了“收集”功能。但是,你必须收集*所有的列,然后将它们分开。 – A5C1D2H2I1M1N2O1R2T1