【问题标题】:Performing a function with 2 arguments with apply or aggregate使用 apply 或 aggregate 执行具有 2 个参数的函数
【发布时间】:2015-12-24 03:25:12
【问题描述】:

除了“x”和“y”列之外,我还有几列用于拆分数据的数据框(现在假设为 2)。在通过 2 列进行子集化后,我想在“x”和“y”上执行诸如散点图或 lm 之类的功能。

我一直在每个子集之后存储“迷你”数据并调用进一步的循环,直到获得所需的“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]))
})

谢谢

【问题讨论】:

  • 用正确的语言标签标记您的问题可能会有所帮助。

标签: r split arguments subset


【解决方案1】:

听起来你想要聚合函数ave 或包dplyrdata.table

如果您只是在绘图,您可以使用ggplot2facet_wrap。 Facet 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)

【讨论】:

  • facet_grid:ggplot(df, aes(x = X_height, y = Y_weight)) + geom_line() + facet_grid(gender ~ country)
  • 谢谢大家 :) 'ave' 似乎是聚合,默认函数为 mean。这不是我想要的。我还没有学习 dplyr 和 data.table。您推荐其中的任何特定功能吗?绘图也很好。我希望解决方案像 ggplot2 一样简单!再次感谢:)
  • 如果您想学习,请查看备忘单:dplyrdata.table
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
相关资源
最近更新 更多