我有一个非常大的数据集,其中包含两列,如下所示。
df <- data.frame(
group = c("123-4", "123-4", "234-5", "234-5", "345-6", "345-6"),
age = c(38, 41, 65, 67, 78, 23))
group age
123-4 38
123-4 41
234-5 65
234-5 67
345-6 78
345-6 23
我希望能够绘制每个小组的年龄。我可以通过拉出每个组的最小值和最大值来做到这一点,但我想保持xy的随机性,而不是拥有所有的最小值x和所有的最大值y。看来这应该很容易,但是我正在狂轰滥炸。
答案 0 :(得分:0)
我们可以编写一个帮助函数来为每个组精确值。
group_val <- function(values, groups, index=1) tapply(values, groups, `[`, index)
例如
with(df, group_val(age, group, 1))
# 123-4 234-5 345-6
# 38 65 78
with(df, group_val(age, group, 2))
# 123-4 234-5 345-6
# 41 67 23
那你可以做
plot(group_val(df$age, df$group, 1), group_val(df$age, df$group, 2))
# or plot(group_val(age, group, 2) ~ group_val(age, group, 1), df)
尽管更常见的处理方式是将数据从长到宽重塑。这个站点上还有很多其他有关该任务的问题。但是,如果您想使用gpplot
,就必须这样做。例如
library(mutate)
library(tidyr)
library(ggplot2)
df %>% group_by(group) %>%
mutate(seq = letters[1:n()]) %>%
spread(seq, age) %>%
ggplot(aes(a,b)) + geom_point()
答案 1 :(得分:0)
弗洛里克先生提出了正确的想法,从长到宽。据我所知应该很容易修复,但是太新了,无法找出
UserWelcome {#441 ▼
+locale: null
+from: []
+to: []
+cc: []
+bcc: []
+replyTo: []
+subject: null
#markdown: null
#html: null
+view: null
+textView: null
+viewData: []
+attachments: []
+rawAttachments: []
+callbacks: []
+connection: null
+queue: null
+chainConnection: null
+chainQueue: null
+delay: null
+chained: []