【发布时间】:2016-11-25 02:14:46
【问题描述】:
抱歉,如果这是一个简单的问题,但我在搜索后无法找到简单的解决方案。我对 R 相当陌生,并且无法使用 melt (reshape2) 或 gather(tidyr) 函数将宽格式转换为长格式。我正在使用的数据集包含 22 个不同的时间变量,每个变量都有 3 个时间段。当我尝试一次将所有这些从宽格式转换为长格式时,就会出现问题。我在单独转换它们方面取得了成功,但这是一个非常低效且漫长的过程,所以我想知道是否有人可以提出一个更简单的解决方案。下面是我创建的示例数据集,其格式与我正在使用的数据集类似:
Subject <- c(1, 2, 3)
BlueTime1 <- c(2, 5, 6)
BlueTime2 <- c(4, 6, 7)
BlueTime3 <- c(1, 2, 3)
RedTime1 <- c(2, 5, 6)
RedTime2 <- c(4, 6, 7)
RedTime3 <- c(1, 2, 3)
GreenTime1 <- c(2, 5, 6)
GreenTime2 <- c(4, 6, 7)
GreenTime3 <- c(1, 2, 3)
sample.df <- data.frame(Subject, BlueTime1, BlueTime2, BlueTime3,
RedTime1, RedTime2, RedTime3,
GreenTime1,GreenTime2, GreenTime3)
一个对我有用的解决方案是使用 tidyr 的收集功能,按主题排列数据(以便将每个主题的数据分组在一起),然后仅选择主题、时间段和评级。这是为每个变量完成的(在我的例子中是 22)。
install.packages("dplyr")
install.packages("tidyr")
library(dplyr)
library(tidyr)
BlueGather <- gather(sample.df, Time_Blue, Rating_Blue, c(BlueTime1,
BlueTime2,
BlueTime3))
BlueSorted <- arrange(BlueGather, Subject)
BlueSubtracted <- select(BlueSorted, Subject, Time_Blue, Rating_Blue)
在这段代码之后,我将所有内容合并到一个数据框中。这对我来说似乎非常缓慢且效率低下,并希望有人可以帮助我找到更简单的解决方案。谢谢!
【问题讨论】:
标签: r dplyr reshape2 tidyr melt