我遇到了数据纠纷问题。
根据观察,我的数据具有许多展示的“特征”,它们会产生结果以及花费的时间。
因此,例如,我们有这些数据。
participantID observation treatment duration outcome feature.A feature.B feature.C feature.D feature.other
1 1 A 3.1 Successful TRUE FALSE TRUE FALSE FALSE
1 2 A 2.1 Successful TRUE TRUE FALSE TRUE FALSE
1 3 A 1.0 Unsuccessful FALSE FALSE FALSE FALSE TRUE
1 4 A 5.1 Successful TRUE FALSE TRUE TRUE FALSE
2 1 B 2.5 Unsuccessful FALSE FALSE FALSE FALSE TRUE
2 2 B 3.1 Unsuccessful TRUE FALSE TRUE FALSE FALSE
2 3 B 2.6 Successful TRUE TRUE FALSE FALSE FALSE
2 4 B 2.8 Successful TRUE FALSE TRUE FALSE FALSE
2 5 B 2 Unsuccessful TRUE TRUE TRUE TRUE FALSE
2 6 B 3.6 Successful TRUE FALSE TRUE FALSE FALSE
3 1 A 3.4 Successful FALSE FALSE FALSE FALSE TRUE
3 2 A 3.5 Unsuccessful TRUE FALSE TRUE FALSE FALSE
我们的想法是,我们有参与者尝试了不同的尝试(观察)。这些参与者在治疗组A或B中。根据他们的尝试,我们确定他们是成功还是不成功,以及持续时间他们的尝试。我们还确定他们是否使用了彼此不相互排斥的特定功能,但 feature.other 除外,只有在每个其他功能都是FALSE。
我希望能够使用类似于以下的命令在ggplot中绘制此数据:
ggplot(test, aes(x=observation, y=duration, fill=outcome)) + geom_bar(position="dodge", stat="identity") + facet_grid(participantID ~ feature.A + feature.B + feature.C + feature.D + feature.other)
此命令将打印特征和参与者的网格图,看起来像这样:
但是,我不确定这是使用数据的正确方法。我想要做的一件事是以某种方式将不同的“特征”变量合并为一个,所以我可以轻松地使用它(例如,如果我想构建堆积条形图,我可以将其添加为“特征” ggplot中的专栏)。
根据我的理解,我应该把它融化成长格式,对吧?但是如果我做错了,那么特征变量会最终复制观察数量,因为每个“TRUE”最终都会显示为一个ID,然后它会在计算观察结果时出现问题(特别是如果我cumsum
s和类似的做添加)。
尝试: 重塑(测试,方向=“长”,变化= c(“feature.A”,“feature.B”,“feature.C”,“feature.D”,“feature.other”))#这给了我一些奇数输出,包括“时间”作为旧特征变量A / B / C / D /其他
但是当我绘制它时,它给出了没有意义的输出(例如,所有的条最终都是相同的高度)。
所以我的问题是:
如何格式化相关的二元因子(如特征),使其与reshape和ggplot很好地匹配,而不重复变量输出值?
我问这个是因为如果我想(稍后)绘制每次观察的持续时间的累积总和,使用重塑会妨碍:例如,如果我有一个重新塑造的数据框:
ddply(test_long, .(participantID), summarize,cumsum(duration))
会给我不正确的结果。我认为解决这个问题的一种方法是在融化之前简单地进行计算,但是以依赖于顺序的方式做事情比想法要少。
也许这也源于对“长”格式和“宽”格式是什么以及它们如何与ggplot交互的理解,如果有人可以简要地指出解释性资源以进一步理解我会很感激。
下面的输入数据:
test <- structure(list(participantID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 3L), observation = c(1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 5L, 6L, 1L, 2L), treatment = structure(c(1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L), .Label = c("A", "B"), class = "factor"),
duration = c(3.1, 2.1, 1, 5.1, 2.5, 3.1, 2.6, 2.8, 2, 3.6,
3.4, 3.5), outcome = structure(c(1L, 1L, 2L, 1L, 2L, 2L,
1L, 1L, 2L, 1L, 1L, 2L), .Label = c("Successful", "Unsuccessful"
), class = "factor"), feature.A = c(TRUE, TRUE, FALSE, TRUE,
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE), feature.B = c(FALSE,
TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE), feature.C = c(TRUE, FALSE, FALSE, TRUE, FALSE,
TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE), feature.D = c(FALSE,
TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
FALSE, FALSE), feature.other = c(FALSE, FALSE, TRUE, FALSE,
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE)), .Names = c("participantID",
"observation", "treatment", "duration", "outcome", "feature.A",
"feature.B", "feature.C", "feature.D", "feature.other"), class = "data.frame", row.names = c(NA,
-12L))
答案 0 :(得分:2)
test_long = reshape(test, direction = 'long',
idvar = 1:5, varying = 6:10, sep = ".",
)
rownames(test_long) = NULL
library(ggplot2)
ggplot(test_long, aes(x = observation, y = duration, fill = outcome)) +
geom_bar(position="dodge", stat="identity") +
facet_grid(participantID ~ time)