2017-07-11 7 views
1

修正と変更変数との相関をサブグループで分けたデータフレームが必要です。 データセットmtcarsを例に挙げて、私が考えた最も近い解決策を以下に示します(相関関係は意味をなす必要はありません)。異なる変数間およびグループ間の相関のためのデータフレームを作成

library(datasets) 
data(mtcars) 
df <- load(mtcars) 

as.factor(mtcars$am) 
as.factor(mtcars$gear) 
as.factor(mtcars$carb) 

library(plyr) 
cors <- function(var, group) { 
    corrl <- ddply(df, .(group), summarise, "corr" = cor(var, mpg, method = "spearman")) 
} 

dafr.var <- as.vector(c("cyl", "disp", "hp", "drat")) 
args<- merge(as.character(c("am", "gear", "carb")), dafr.var) 
args[,1:2]<- lapply(args[,1:2], as.character) 
colnames(args) <- c("grouping", "variable") 

cortable <- NULL 
for (i in 1:nrow(args)){ 
    cortable<- rbind(cortable, cors(var = df[args[i,2]], group = df[args[i,1]])) 
} 
cortable 

「Cortable」彼らは、中間ステップに記載されているようにサブグループによって相関を示しています最終的なデータフレーム、あろう - データフレーム「引数」。

私の質問は明確ですか?なぜこれがうまくいかないのか、私のコードで変更できるのか誰にでも分かりますか? 何か助けていただければ幸いです。

大切にしてください。

答えて

1

このようなことが、あなたが探しているものを得るのに役立ちますか?

df <- mtcars 

df$make <- rownames(df) 
df$make <- sapply(df$make, function(x) strsplit(x, " ")[[1]][1]) 

cors <- function(var, group) { 
    require(plyr) 
    corrl <- ddply(df, group, function(x) cor(x[,var], x[,"mpg"], method = "spearman")) 
    corrl$var <- var 
    corrl$group <- group 
    colnames(corrl) <- c("value", "corr", "var", "group") 
    return(corrl) 
} 

dafr.var <- as.vector(c("cyl", "disp", "hp", "drat")) 
args <- merge(as.character(c("am", "gear", "carb", "make")), dafr.var) 
args[,1:2] <- lapply(args[,1:2], as.character) 
colnames(args) <- c("grouping", "variable") 


cortable <- data.frame(value = numeric(), corr = numeric(), var = character(), group = character(), stringsAsFactors = FALSE) 

for (i in 1:nrow(args)){ 
    cortable <- rbind(cortable, cors(var = args[i,2], group = args[i,1])) 
} 

cortable <- cortable[,c("var","group","value","corr")] 

cortable 
+0

ありがとうございました!このコードではエラーは発生しませんが、どうやら相関関係はサブグループによって異なるものではありません。 'value corr var group 1 0 -0.9108013 cyl am 2 1 -0.9108013 cyl am 3 3 -0.9108013 cylギア 4 4 -0.9108013 cyl gear';シリンダーとギアの相関関係は、シリンダーと午前の相関関係とは異なる結果になるはずです。どういう意味ですか?また、_am_のサブグループが_male_と_female_(0と1の代わりに)だった場合、_value_の値は "male"と "female"でなければなりません。あなたが混乱している場合は、必要に応じて実際のデータを提供することができます。@Matt – fabha

+0

あなたが探しているものが得られると思われるいくつかの変更で私の回答を更新しました。 –

+0

これは素晴らしいです。ありがとうございます!もう1つの質問:真の値を_value_列にどうやって取得するのですか?グループが "city"(私の実際のデータのように)だった場合、値は、1,2,3、または4の代わりに、** Barcelona **、** London **、** Vienna **などの文字でなければなりません。 '' cortable < - data.frame(value = numeric()、corr = numeric()、var = character()、group = character()、stringsAsFactors = FALSE)値=文字()、corr =数値()、var =文字()、グループ=文字()、stringsAsFactors = FALSE) 'それをしません。 – fabha

関連する問題