XY绘图列数据分组在另一列上

时间:2018-11-26 17:05:23

标签: r ggplot2 scatter-plot

我有一个非常大的数据集,其中包含两列,如下所示。

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。看来这应该很容易,但是我正在狂轰滥炸。

2 个答案:

答案 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: []