R 保存保存在使用;由「;功能
我使用“by”函数计算了大量图形(有4个变量)的相关矩阵,并将结果保存在数据框中,如下所示:R 保存保存在使用;由「;功能,r,csv,export-to-csv,R,Csv,Export To Csv,我使用“by”函数计算了大量图形(有4个变量)的相关矩阵,并将结果保存在数据框中,如下所示: results <- by(data, data$graphNumber, cor) 我现在想将结果保存在CSV中。我试过使用: write.table(results,"data.csv") 但这会返回一个错误: Error in as.data.frame.default(results[[i]], optional = TRUE, stringsAsFactors = stringsAs
results <- by(data, data$graphNumber, cor)
我现在想将结果保存在CSV中。我试过使用:
write.table(results,"data.csv")
但这会返回一个错误:
Error in as.data.frame.default(results[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class '"by"' into a data.frame
我可以使用以下方法编写每个矩阵:
write.table(results[1],"data.csv")
但是,我想将所有结果写入一个CSV文件,并以某种方式标识每个矩阵对应的图形
结果结构,
str(结果)
:
您可以使用
do.call
和rbind
转换为data.frame
:
resultsdf <- as.data.frame(do.call(rbind,results))
resultsdf获取数据帧的一个选项是使用ddply
:
n = 100
library(plyr)
dfx <- data.frame(
graphNumber = c(rep('A', 8), rep('B', 15), rep('C', 6)),
x = runif(n = 29, min = 18, max = 54),
y = runif(n = 29, min = 18, max = 54)
)
ddply(dfx, .(graphNumber), function(x){
cor(x[,-1])
})
graphNumber x y
1 A 1.00000000 0.54914531
2 A 0.54914531 1.00000000
3 B 1.00000000 -0.02346146
4 B -0.02346146 1.00000000
5 C 1.00000000 -0.86352644
6 C -0.86352644 1.00000000
n=100
图书馆(plyr)
dfx您可以熔化列表中的每个数据帧,然后转换为数据帧
library(reshape2)
library(plyr)
results <- by(mtcars[ , 1:4], list(am = mtcars[, "am"]), cor)
results
# am: 0
# mpg cyl disp hp
# mpg 1.0000000 -0.7959989 -0.7926335 -0.8315065
# cyl -0.7959989 1.0000000 0.8294544 0.8454881
# disp -0.7926335 0.8294544 1.0000000 0.8343294
# hp -0.8315065 0.8454881 0.8343294 1.0000000
# ------------------------------------------------------------------------------------------------------
# am: 1
# mpg cyl disp hp
# mpg 1.0000000 -0.8259983 -0.8348954 -0.8006683
# cyl -0.8259983 1.0000000 0.9408836 0.9004347
# disp -0.8348954 0.9408836 1.0000000 0.9240353
# hp -0.8006683 0.9004347 0.9240353 1.0000000
results2 <- llply(results, melt)
results2
results3 <- ldply(results2)
results3
# .id Var1 Var2 value
# 1 0 mpg mpg 1.0000000
# 2 0 cyl mpg -0.7959989
# 3 0 disp mpg -0.7926335
# 4 0 hp mpg -0.8315065
# 5 0 mpg cyl -0.7959989
# 6 0 cyl cyl 1.0000000
# ...
# 18 1 cyl mpg -0.8259983
# 19 1 disp mpg -0.8348954
# 20 1 hp mpg -0.8006683
# 21 1 mpg cyl -0.8259983
# 22 1 cyl cyl 1.0000000
library(重塑2)
图书馆(plyr)
结果+1这是可行的,但结果仍然是一个矩阵,而不是一个数据框。是的,您可以将其包装并为.data.frame
,但是如果行名重复,则会出现错误,因此需要更改这些行名。@James这是可行的,但您无法分辨每个矩阵对应的组(或图形)。我怎么能包括这个information@agstudy@Josh我已对其进行了正确编辑,这将在行名
中提供分组信息,但同样的方法也可用于添加额外列do.call(rbind.data.frame,…)
应该直接获得一个数据.frame
。@Josh PS:也许你更喜欢保存(results,file=“test.RData”)
和加载(“test.RData”)
而不是类型转换。
rownames(resultsdf) <- paste(rownames(resultsdf),rep(names(results),sapply(results,nrow)), sep=".")
results <- by(mtcars[c("mpg","disp","hp")],mtcars$cyl,cor)
resultsdf
mpg disp hp
mpg.4 1.0000000 -0.8052361 -0.5235034
disp.4 -0.8052361 1.0000000 0.4346051
hp.4 -0.5235034 0.4346051 1.0000000
mpg.6 1.0000000 0.1030827 -0.1270678
disp.6 0.1030827 1.0000000 -0.5136284
hp.6 -0.1270678 -0.5136284 1.0000000
mpg.8 1.0000000 -0.5197670 -0.2836357
disp.8 -0.5197670 1.0000000 0.1182556
hp.8 -0.2836357 0.1182556 1.0000000
n = 100
library(plyr)
dfx <- data.frame(
graphNumber = c(rep('A', 8), rep('B', 15), rep('C', 6)),
x = runif(n = 29, min = 18, max = 54),
y = runif(n = 29, min = 18, max = 54)
)
ddply(dfx, .(graphNumber), function(x){
cor(x[,-1])
})
graphNumber x y
1 A 1.00000000 0.54914531
2 A 0.54914531 1.00000000
3 B 1.00000000 -0.02346146
4 B -0.02346146 1.00000000
5 C 1.00000000 -0.86352644
6 C -0.86352644 1.00000000
# generate sample data
n <- 1000; graphNum <- 4
data <- data.frame(x=runif(n, 1, 100),
y=runif(n, 1, 100),
graphNumber=gl(graphNum,n/graphNum))
(results <- by(data[,1:2], data$graphNumber, cor))
# to data frame
(df <- do.call(rbind, lapply(results, as.data.frame)))
# x y
# 1.x 1.00000000 -0.13468673
# 1.y -0.13468673 1.00000000
# 2.x 1.00000000 -0.04512667
# 2.y -0.04512667 1.00000000
# 3.x 1.00000000 0.03609621
# 3.y 0.03609621 1.00000000
# 4.x 1.00000000 -0.04193474
# 4.y -0.04193474 1.00000000
strsplit(row.names(df), "\\.")
library(reshape2)
library(plyr)
results <- by(mtcars[ , 1:4], list(am = mtcars[, "am"]), cor)
results
# am: 0
# mpg cyl disp hp
# mpg 1.0000000 -0.7959989 -0.7926335 -0.8315065
# cyl -0.7959989 1.0000000 0.8294544 0.8454881
# disp -0.7926335 0.8294544 1.0000000 0.8343294
# hp -0.8315065 0.8454881 0.8343294 1.0000000
# ------------------------------------------------------------------------------------------------------
# am: 1
# mpg cyl disp hp
# mpg 1.0000000 -0.8259983 -0.8348954 -0.8006683
# cyl -0.8259983 1.0000000 0.9408836 0.9004347
# disp -0.8348954 0.9408836 1.0000000 0.9240353
# hp -0.8006683 0.9004347 0.9240353 1.0000000
results2 <- llply(results, melt)
results2
results3 <- ldply(results2)
results3
# .id Var1 Var2 value
# 1 0 mpg mpg 1.0000000
# 2 0 cyl mpg -0.7959989
# 3 0 disp mpg -0.7926335
# 4 0 hp mpg -0.8315065
# 5 0 mpg cyl -0.7959989
# 6 0 cyl cyl 1.0000000
# ...
# 18 1 cyl mpg -0.8259983
# 19 1 disp mpg -0.8348954
# 20 1 hp mpg -0.8006683
# 21 1 mpg cyl -0.8259983
# 22 1 cyl cyl 1.0000000