我正在尝试将cor函数应用于数据集。以下是我的代码:
corr <- function(directory, threshold = 0) {
for (i in 1:332) {
data = read.csv(paste(directory, '/',
formatC(i, width = 3, flag = '0'), '.csv', sep = '')) # reading all files
}
cv = numeric() #initializing list
data = na.omit(data) #omitting NAs from read file
if (nrow(data) > threshold) {
cv = c(cv, cor(data[,2], data[,3])) #if number of rows more than threshold, get correlation of data
}
cv
}
在命令行中,我可以调用:
cr <- corr('specdata', 150)
head(cr)
我的预期输出是:
但我获得的返回值仅为:
我不完全了解cor,为什么我得到这个结果,请帮忙。我的所有CSV文件都包含普通表。谢谢!
答案 0 :(得分:2)
对于两个向量x和y,cor(x,y)返回x和y的相关系数,只是一个数字。这就是你的代码正在做的事情。
cor(1:10,2:11)#返回1.0
如果您想要更多相关性,则需要发送包含变量的数据框。对于数据帧&#39; df&#39; (例如)3列,然后cor(df)将返回3乘3矩阵。
df <- data.frame(a=1:3, b=c(3,2,8), c=c(12,3,8))
cor(df)
a b c
a 1.0000000 0.7777138 -0.4435328
b 0.7777138 1.0000000 0.2184630
c -0.4435328 0.2184630 1.0000000
答案 1 :(得分:0)
您在编辑中添加了for
循环。您似乎正在尝试为directory
中的每个csv返回相关常量。
我们可以尝试这样的事情。
df1 <- data.frame(x = rnorm(10), y = rnorm(10))
df2 <- data.frame(x = rnorm(10), y = rnorm(10))
df3 <- data.frame(x = rnorm(10), y = rnorm(10))
write.csv(df1, "1.csv")
write.csv(df2, "2.csv")
write.csv(df3, "3.csv")
corr <- function(directory){
temp = list.files(path = directory, pattern = "[0-9]+.csv")
# in your case
# temp = list.files(path = directory, pattern = "[0-9]{3}.csv")
dat = lapply(temp, function(x){read.csv(x, header = T)})
corlist <- lapply(dat, function(x){cor(cor(x[,1], x[,2]))})
unlist(corlist)
}
corr(".")
0.07766259 0.24449723 0.20367101