首页 > 解决方案 > 按类别对列表进行相关性检验

问题描述

(对不起,我不能发布图片,因为我没有声誉)

我有一个包含 21 个数据框的列表,我希望按分类组对其进行相关性测试。类别位于变量下,Station对于 21 个数据帧是相同的。

请参阅下面单个数据框的小片段

这是单个数据帧的一小段

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

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

上述代码的输出

我现在希望在列表的长度上这样做

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

我必须申请吗?干杯传奇

标签: rlistcorrelation

解决方案


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

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)

推荐阅读