2015-09-26 64 views
0

除了“x”和“y”列,我还有数据框用于分割数据(假设现在是2)。我希望在通过2列之后执行诸如散点图或lm之类的函数在“x”和“y”上。使用带有2个参数的函数执行应用或聚合

我一直在每个子集之后存储“mini”数据并调用更多的循环,直到我得到所需的“x”和“y”,但在3个或更多循环后变得复杂。最近,我试图创建一个存储所有可能组合的'关键'变量。

有没有简单的方法先分割数据并调用函数?也许是应用或聚合的延伸,但所有因素都要经过所有组合。

country <- rep(c("Australia","UK"), 2, each = 6) 
gender <- rep(c("M","F"),1, each = 12) 
X_height <- rep(seq(150,200,10),4) 
Y_weight <- c(seq(70,95,5), 
       seq(71,96,5), 
       seq(65,90,5), 
       seq(66,91,5)) 



df <- data.frame(country, gender, X_height, Y_weight) 

df[,"Key"] <- paste(df$country, df$gender, sep="_") 

keys <- unique(df$Key) 
par(mfrow = c(2,2)) 
sapply(1:length(keys), function(i){ 
    with(subset(df, Key == keys[i]),plot(x = X_height, Y_weight, main = keys[i])) 
}) 

感谢

+1

它可能是有帮助的标记用正确的语言标记你的问题。 – vikingosegundo

回答

1

这听起来像你想的聚集功能,ave或包dplyrdata.table

如果您只是绘图,可以使用ggplot2facet_wrap。小包装需要很短的公式根据您想要什么样组:

library(ggplot2) 
ggplot(df, aes(x = X_height, y = Y_weight)) + 
     geom_line() + 
     facet_wrap(~country + gender, ncol = 2) 
#the same as 
ggplot(df, aes(x = X_height, y = Y_weight)) + 
     geom_line() + 
     facet_wrap(~Key, ncol = 2) 

enter image description here

+1

或'facet_grid':'ggplot(df,aes(x = X_height,y = Y_weight))+ geom_line()+ facet_grid(gender〜country)' – Jaap

+0

Thanks :) guys'ave'like as aggregate with mean as the默认功能。这不是我想要的。我还没有学习dplyr和data.table。你推荐的任何特定功能?密谋也很好。我希望解决方案像ggplot2一样简单!再次感谢:) – Jay

+0

如果你想了解,请查看备忘单:[dplyr](https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf)和[data.table](https://s3.amazonaws.com/assets.datacamp.com/img/blog/data+table+cheat+sheet.pdf) – jeremycg

相关问题