R 使用ddply的摘要统计信息
我喜欢使用R 使用ddply的摘要统计信息,r,dataframe,plyr,R,Dataframe,Plyr,我喜欢使用ddply编写一个函数,该函数根据data.framemat的两列名称输出摘要统计信息 mat是一个大的数据框,列名为“公制”、“长度”、“种类”、“树”、“索引” 索引是具有两个级别的系数“短”、“长” “公制”、“长度”、“种类”、“树”等都是连续变量 功能: summary1 <- function(arg1,arg2) { ... ss <- ddply(mat, .(index), function(X) data.frame(
ddply
编写一个函数,该函数根据data.frame
mat
的两列名称输出摘要统计信息
是一个大的mat
,列名为数据框
“公制”、“长度”、“种类”、“树”、“索引”
是具有两个级别的系数索引
“短”、“长”
“公制”、“长度”、“种类”、“树”等都是连续变量
summary1 <- function(arg1,arg2) {
...
ss <- ddply(mat, .(index), function(X) data.frame(
arg1 = as.list(summary(X$arg1)),
arg2 = as.list(summary(X$arg2)),
.parallel = FALSE)
ss
}
此时,该函数不产生所需的输出?这里应该做什么修改
谢谢你的帮助
这里是一个玩具的例子
mat <- data.frame(
metric = rpois(10,10), length = rpois(10,10), species = rpois(10,10),
tree = rpois(10,10), index = c(rep("Short",5),rep("Long",5))
)
mat这更像你想要的吗
summary1 <- function(arg1,arg2) {
ss <- ddply(mat, .(index), function(X){ data.frame(
arg1 = as.list(summary(X[,arg1])),
arg2 = as.list(summary(X[,arg2])),
.parallel = FALSE)})
ss
}
summary1因为不能使用$
引用作为字符名传递的变量。编写X$arg1
时,然后R
在data.frame
X
中搜索名为“arg1”
的列。您可以通过X[,arg1]
或X[[arg1]]
来引用它
如果您想获得命名良好的输出,我建议以下解决方案:
summary1 <- function(arg1, arg2) {
ss <- ddply(mat, .(index), function(X) data.frame(
setNames(
list(as.list(summary(X[[arg1]])), as.list(summary(X[[arg2]]))),
c(arg1,arg2)
)), .parallel = FALSE)
ss
}
summary1("metric","length")
如果您提供示例数据(最好是使用dput
),这将更容易回答。@Richie-这里有一个玩具示例mat您可以编辑问题以添加示例数据,而不是编写注释(我为您完成了此操作;))。我建议通过为data.frame
和要拆分的变量传入附加参数,使函数更具通用性。这样,当您需要在名为Mat
或Mat
或MyOtherData
等的data.frame上使用函数时,该函数将正常工作。应该有一个R通用函数。甚至支持任何数量的论点。有这样的情况吗?
summary1 <- function(arg1, arg2) {
ss <- ddply(mat, .(index), function(X) data.frame(
setNames(
list(as.list(summary(X[[arg1]])), as.list(summary(X[[arg2]]))),
c(arg1,arg2)
)), .parallel = FALSE)
ss
}
summary1("metric","length")
index metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu.
1 Long 5 7 10 8.6 10
2 Short 7 7 9 8.8 10
metric.Max. length.Min. length.1st.Qu. length.Median length.Mean length.3rd.Qu.
1 11 9 10 11 10.8 12
2 11 4 9 9 9.0 11
length.Max.
1 12
2 12