创建相关循环以打印和保存 30 个不同数据集的 png

Creating a correlation loop to print and save png for 30 different data sets

我是 Whosebug 的新手,但发现社区对我之前的所有问题都提供了惊人的帮助。但是,我找不到这个问题的答案,所以我来了。

我的问题必须处理我拥有的多个数据集,以及是否有办法通过打印和保存 png 的相关循环来循环所有数据集。这是使用梦幻篮球统计数据,我只是 运行宁成对相关性试图看看两个球员的得分之间是否存在正相关或负相关。

Here is a link to a Google Sheet with an example of some of my data.

这只是我正在处理的数据的一个简短示例,它是按日期从最近到最近向下排列的(不是很重要)。此数据框的名称是 "bucks"。我的真实数据中每支 NBA 球队大约有 10-20 个球员列,即 30 支球队。

问题 1:我认为这部分比较容易并且可以完成。我可以为我的所有玩家循环相关性以使其相互关联并为此打印一个图并将其另存为我的计算机或保管箱中某个地方的 png 吗? (例如,Brandon Knight vs. Antetokounmpo、Middleton、Mayo,然后 Antetokounmpo vs. Middleton、Mayo 等)我之前 运行 每个团队都有一个 corrplot 来简化这个过程,只需要打印一个图,这样对我来说也是一个选择。

问题 2:然后我可以将这个相关循环应用到我有数据的 NBA 其他 29 支球队吗?我该怎么做呢?因为这些都位于不同的数据帧中,这是否可能告诉循环进入不同的数据帧而不是停留在同一个数据帧中?

这是到目前为止我的流程的一些示例代码。它非常简单,我为每个不同的团队使用了一个新行 copy/pasted。

library(corrplot)

#Data Import from Google Drive--------------
hawks = read.csv(file = "<insert my Google Drive link here>")
hawks[hawks == 0] <- NA
spurs = read.csv(file = "<insert my Google Drive link here>")
spurs[spurs == 0] <- NA
...
wizards = read.csv(file = "<insert my Google Drive link here>")
wizards[wizards == 0] <- NA

#Team by Team Correlations----------------------------------
CORhawks = cor(hawks[c(2:10)], use="pairwise.complete.obs")
CORspurs = cor(spurs[c(2:10)], use="pairwise.complete.obs")
...
CORwizards = cor(wizards[c(2:10)], use="pairwise.complete.obs")

#Team by Team Color Set up-----------------------------------
colhawks <- colorRampPalette(c("midnightblue", "brown2" ))
colnets <- colorRampPalette(c("black", "gray80" ))
...
colwizards <- colorRampPalette(c("firebrick2", "gray80"))

#Team by Team Bubble Plotting--------------------------------------------
corrplot(CORhawks, order ="hclust", tl.col="black", col = colhawks(2), outline=TRUE)
corrplot(CORspurs, order ="hclust",  tl.col="black", col = colspurs(2), outline=TRUE)
...
corrplot(CORwizards, order ="hclust",  tl.col="black", col = colwizards(2), outline=TRUE)

从技术上讲,这个系统会帮我完成工作。我只是想知道如何最好地编写一个循环来加快这个过程并帮助我理解循环编写以便我将来可以这样做。

感谢您提供的所有帮助,如果您需要任何说明,请告诉我!

我昨天只是在为一位科学家的数据做这样的事情。

将计算的所有公共部分放入一个函数中。将所有可变内容(文件名等)放入列表中(或通过读取文件创建列表)。然后遍历你的列表,运行 你在每个项目上的功能。

下面是一些示例代码:

TEAMS <- list( list(name="Hawks",
                    file="<insert Google Drive link here>",
                    colors=colorRampPalette(c("midnightblue", "brown2"))
               ),
               list(name="Nets",
                    file="<insert Google Drive link here>",
                    colors=colorRampPalette(c("black", "gray80")),
               )
         )

plot_team <- function (x) {

    # Read in the data and clean it up
    team            <- read.csv(file = x$file)
    team[team == 0] <- NA

    # Calculate the correlation
    CORteam <- cor(team[c(2:10)], use="pairwise.complete.obs")

    # Create unique output filename
    output_filename <- paste0(x$name,".png")

    # Open the file for the plot to be written to
    png(output_filename)

    # Draw the plot
    corrplot(CORteam, order ="hclust", tl.col="black", col = x$colors(2), outline=TRUE)

    # Close the file
    dev.off()
}

for (team in TEAMS) {
    plot_team(team)
}