2017-08-10 53 views
-1

我需要做類似於this的工作,但略有不同。提取列以分離數據幀

我有一個33欄的數據框。我需要有一系列具有第一列和以下各列之一的數據框。

我該怎麼做?

UPDATE

獲取靈感在上面鏈接問題的答案之一,我試圖做到以下幾點:

for (i in 2:ncol(data)) 
{temp <- data.frame(data$col1, data[,i]) 
colnames(temp) <- colnames(data)[i] 
assign(colnames(data)[i], temp)  
rm(temp) 
} 

它的工作原理,但兩列的標籤混合起來,即第一列獲得標籤,但不是第二個。

回答

2

你可以把它們放在一個列表:

mylist <- list() 

for(i in 1:32){ 
    mylist[[i]] <- df[,c(1, i+1)] 
    names(mylist)[i] <- colnames(df)[i+1] 
} 

這將創建32個dataframes,每個第一列清單,並連續一個其他的,從第二。

+0

謝謝,但我將能夠運行進一步分析,如果它是一個數據幀? –

+1

是的,你可以用mylist [[i]]來訪問每個2列數據幀,它將返回數據幀本身 – CPak

+0

正如@ChiPak所說,列表中的對象仍然是類data.frame 。 – LAP

1

或者,你可以用一個功能做到這一點,如:

makedf <- function(df, i) { 
    df %>% 
    select(c(1,i)) %>% 
    return() 
} 
0

完成。

for (i in 2:ncol(data)) 
 
{temp <- data.frame(data[,1], data[,i]) 
 
colnames(temp) <- c("col1", colnames(data)[i]) 
 
assign(colnames(data)[i], temp) 
 
rm(temp) 
 
}

+0

好吧,你可以這樣做,但是包含所有數據框的列表將比使用32個數據框混淆全局環境更加高效。該列表還允許您簡單地循環進一步計算所有子集。 – LAP

+0

那麼,即使我必須分割每個數據框的向量並運行單獨的分析,您是否認爲您的解決方案更容易? –

+0

您可以使用'lapply()'在列表中循環分析。分裂載體是什麼意思? – LAP