按类别对列表进行的相关性测试

Correlation test by category over a list

(抱歉我不能 post 图片,因为我没有名气)

我有一个包含 21 个数据帧的列表,我希望按分类组对它们执行相关性测试。类别在变量 Station 下并且对于 21 个数据帧是相同的。

请查看下面单个数据框的小片段

This is a small snippet of a single dataframe

下面是对单个数据帧进行相关性测试的代码,下面是输出

func <- function(b21)
{
  return(data.frame(COR = cor(b21$Origin, b21$Rainfall)))
}
a <- ddply(b21, .(Station), func)

Output of above code

我现在希望在整个列表中这样做

func <- function(top30clean)
{
  return(data.frame(COR = cor(x$Origin, x$Rainfall)))
}
a <- ddply(top30clean, .(Station), func)

当我尝试 运行 时出现以下错误

Error in if (empty(.data)) return(.data) : 
  missing value where TRUE/FALSE needed

我必须 lapply 吗? 干杯传奇

只需使用 lapply 和 lambda 函数遍历 list,使用相同的代码

library(plyr)
func <- function(data) {
    return(data.frame(COR = cor(data$Origin, data$Rainfall)))
 }

out <- lapply(top30clean, function(dat) ddply(dat, .(Station), func))

-输出

out[[1]]
   Station         COR
1       b1 -0.22839583
2      b10 -0.34085326
3       b2  0.55192520
4       b3 -0.19323719
5       b4 -0.87735044
6       b5  0.50342343
7       b6 -0.38747112
8       b7  0.13616484
9       b8 -0.30886631
10      b9  0.04089663

out[[3]]
   Station         COR
1       b1 -0.11467295
2      b10  0.38343956
3       b2  0.86669396
4       b3 -0.71142786
5       b4  0.50981405
6       b5 -0.15545226
7       b6 -0.03622854
8       b7 -0.51338336
9       b8  0.16221257
10      b9  0.58353028

数据

set.seed(24)
top30clean <- replicate(5, data.frame(Station = rep(paste0("b", 1:10), each =  5),
    Rainfall = sample(0:100, 50, replace  = TRUE), 
    Origin = sample(75:100, 50, replace = TRUE)), simplify = FALSE)