【问题标题】:Apply "bivariate" function to all dataset variables将“双变量”函数应用于所有数据集变量
【发布时间】:2012-03-12 17:58:47
【问题描述】:

我想创建一个函数 X,它将另一个函数 Y 应用于多个变量。

功能Y

DplotV <- function (id,x){
    D <- as.data.frame(cbind(id,x))
    x1 <- as.data.frame(D[order(x),])
    dotchart(x1$x,labels=id,pch=16)
}

DplotV(mydata$id,mydata$blood)

这基本上通过变量 x 对 id 和变量 x 进行排序并创建一个点图。我还创建了一些代码来命名图表并通过获取 x 变量名称来保存它,我没有在这里包含它。在完整的函数中,我还有其他参数,例如颜色等......因此为每个变量编写函数成为一项重复而漫长的任务。

在处理大型数据集时,最好通过同一个 id 变量绘制多个变量。

有没有办法将上述函数应用于数据集中的每个变量(但总是使用相同的 id 变量?)

理想情况下,我想要一个函数(例如 DplotData),它将 DplotV 应用于数据集中的所有变量(如果可能,除了 id var),这样我就可以只写 DplotData(mydata$id,mydata) 并且该函数将遍历所有数据集变量(在本例中为血液和体重)。

【问题讨论】:

  • 您正在重新发明轮子。 dotchart 做了你已经描述的事情,只要你正确地组织你的数据。请参阅?dotchart 中的示例。另一种选择是使用 ggplot2lattice 进行刻面。
  • stackoverflow.com/questions/9666151/… for 循环正是我们所需要的
  • 感谢you

标签: r apply


【解决方案1】:

使用?dotchart 中的示例,如果您以类似于VADeaths 的方式组织数据:

VADeaths
      Rural Male Rural Female Urban Male Urban Female
50-54       11.7          8.7       15.4          8.4
55-59       18.1         11.7       24.3         13.6
60-64       26.9         20.3       37.0         19.3
65-69       41.0         30.9       54.6         35.1
70-74       66.0         54.3       71.1         50.0

其中每列是一个变量,行名是 id,然后简单地调用 dotchart(VADeaths) 会产生一个分组的点图:

或者,您可以使用分面,将数据融合为长格式,然后使用ggplot

require(plyr)
require(ggplot2)
ggplot(melt(VADeaths),aes(y = Var1,x = value)) + 
    facet_wrap(~Var2) + 
    geom_point()

【讨论】:

  • 亲爱的乔兰,感谢您的帮助。我忘了提到我已经尝试过这些,但不幸的是我有太多的 id 值,这些值无法控制大小。这些对于数据探索很有用,但是如果您有 30 个 id 类别,则图会太大而 id 标签太小。另一方面,如果您正在处理单个图,则可以更轻松地自定义形状并使其适合报告。
【解决方案2】:

这篇文章的底部

Pass variable name to plotting function title

在绘图图表中集成 for 循环正是我们所需要的。

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 2014-06-28
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多