Мы можем написать вспомогательную функцию для точного определения значения для каждой группы.
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()