gpt4 book ai didi

r - 使用数据帧 : collecting results into one data frame in R

转载 作者:行者123 更新时间:2023-12-02 08:47:39 27 4
gpt4 key购买 nike

在工作区中,我有 48 个数据框:

zbp1994f, zbp1994m, zbp1994r
zbp1995f, zbp1995m, zbp1995r
......
zbp2009f, zbp2009m, zbp2009r

在每一帧中,都有一个组变量(比如,group)。我按组计算一个数据帧的统计量 (Moran's I),即 zbp1994f:

library(ape)
moranfn <- function(dta) {
distinv <- -1/as.matrix(dist(cbind(dta$longi, dta$lati)))
diag(distinv) <- 0
Moran_result <- data.frame(Moran.I(dta$myvariable, distinv))
}

library(plyr)
Moran_result_1994f <- ddply(zbp1994f,"group",moranfn)

这为我提供了 Moran_result_1994f 数据框,其中包含按组统计的数据。

group stat1 stat2 sd     p-value
g1 0.049 -0.01 0.012 2.55e-06
g2 0.122 -0.05 0.041 2.45e-08
......

我的目标是完成所有数据框的工作,并制作一个面板数据集:

group year stat1 stat2 sd p-value
g1 1994 ..... ..... .. .....
g1 1995 ..... ..... .. .....
g1 1996 ..... ..... .. .....
......
g1 2009 ..... ..... .. .....
g2 1994 ..... ..... .. .....
......

我想知道如何在年 (1994:2009) 和 c("f","m","r") 上循环初始过程。

最佳答案

扩展 mnel 的解决方案:

制作一些数据:

set.seed(123)

somelets <- letters[rep(1:5, 2)]

zbp1990f <- data.frame(x=somelets, y=rnorm(10), z=rnorm(10))
zbp1990m <- data.frame(x=somelets, y=rnorm(10), z=rnorm(10))
zbp1991f <- data.frame(x=somelets, y=rnorm(10), z=rnorm(10))
zbp1991m <- data.frame(x=somelets, y=rnorm(10), z=rnorm(10))

创建一些生成数据框的函数:

myfun <- function(.dat){
med <- median(.dat$y)
mean <- mean(.dat$z)
result <- data.frame(stat1=med, stat2=mean)
}

按照 mnel 的建议合并到列表中:

zbp.list <- list(`1990`=list(f=zbp1990f, m=zbp1990m), `1991`=list(f=zbp1991f, m=zbp1991m))

融入数据框:

library(reshape2)

zbp.df <- melt(zbp.list, id.var=names(zbp1990f))

names(zbp.df) <- c("x", "y", "z", "group", "year")

将函数应用于数据框中的每个元素:

library(plyr)

results <- ddply(zbp.df, .(x, group, year), myfun)

head(results)

x group year stat1 stat2
1 a f 1990 0.5772947 1.5054975
2 a f 1991 -0.9089078 0.8848946
3 a m 1990 -1.3772585 0.5575522
4 a m 1991 0.3415841 0.2672701
5 b f 1990 0.1153694 0.4288322
6 b f 1991 -0.3054011 -0.7886498

关于r - 使用数据帧 : collecting results into one data frame in R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com