【发布时间】:2017-12-25 07:26:14
【问题描述】:
随着时间的推移,我正在执行大量人口的相关性。我已将它们相应地分开,并通过 lapply 的函数将它们放在了一起。我想将每个相关性的输出放入一个数据框中(即:每一行将是一个相关性的信息,列:correlation's name, p-value 、t 统计量、df、CIs和corcoeff)。
我有两个问题:
- 我不知道如何提取拆分中所做的关联名称
- 我可以让我的函数在拆分上运行相关性(600+ 相关性),但我不能让它打印到数据框中。澄清一下:当我在没有循环的情况下运行该函数时,它会为每个组执行所有 600 个相关性。但是,当我添加循环时,它会为拆分中的所有组生成 NULL。
这是我目前所拥有的:
> head(Birds) #Shortened for this Post
Location Species Year Longitude Latitude Section Total Percent Family
1 Chiswell A Kittiwake 1976 -149.5847 59.59559 Central 310 16.78397 Gull
BigSplit<-split(Birds,list(Birds$Family, Birds$Location,
Birds$Section,Birds$Species), drop=T) #A list of Dataframes
#Make empty data frame
resultcor <- data.frame(Name = character(),
tvalue = character(),
degreeF = character(),
pvalue = character(),
CIs = character(),
corcoeff = character(),stringsAsFactors = F)
WorkFunc <- function(dataset) {
data.name = substitute(dataset) #Use "dataset" as substitute for actual dataset name
#Correlation between Year and population Percent
try({
correlation <- cor.test(dataset$Year, dataset$Percent, method = "pearson")
}, silent = TRUE)
for (i in 1:nrow(resultcor)) {
resultcor$Name[i] <- ??? #These ??? are not in the code, just highlighting Issue 1
resultcor$tvalue[i] <- correlation$dataset$statistic
resultcor$degreeF[i] <- correlation$dataset$parameter
resultcor$pvalue[i] <- correlation$dataset$p.value
resultcor$CIs[i] <- correlation$dataset$conf.int
resultcor$corcoeff[i] <- correlation$dataset$estimate
}
}
lapply(BigSplit, WorkFunc)
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
查看包裹
broom它会为您完成所有这些工作。 -
split 是在哪里进行的?请显示该代码。 我无法将其打印到数据框中...请解释发生了什么。 BigSplit 是什么数据帧列表?
-
@Parfait 为了清楚起见,我进行了编辑。是的 BigSplit 数据框列表。谢谢
-
@sinQueso 扫帚包正是我想要的,有没有办法将“数据名称”添加为列之一,然后将它们与函数一起添加?
-
@LearningTheMacros 看看这本书的章节r4ds.had.co.nz/many-models.html 它经历了你正在尝试做的事情
标签: r function loops dataframe correlation