2016-03-01 101 views
1

我的數據幀的「測試」看起來像這樣:如何從單個數據框的列自動創建多個數據框?

Date    1   2   3 
01.01.1985   NA   NA   NA 
09.01.1985   NA   NA   NA 
17.01.1985 0.05173014 0.04578678 0.04326039 
25.01.1985   NA   NA   NA 
02.02.1985   NA   NA   NA 
10.02.1985 0.05835957 0.05499137 0.05497832 

對於從1到n(除日期列)各列我想創建1到n(在本實施例3)dataframes每個包含日期列和從1到n的另一列。例如:

 Date   3 
1 01.01.1985   NA 
2 09.01.1985   NA 
3 17.01.1985 0.04326039 
4 25.01.1985   NA 
5 02.02.1985   NA 
6 10.02.1985 0.05497832 

理想的每個數據幀的新公司將數量「n」或類似「new_frame_n」來命名。由於我的整個數據框包含超過一千行(日期)和大約50列(以1到n命名),我想找出一種方法來自動執行此操作。 我已經通過多種方式試了一下,這是我到目前爲止有:

i <- 2 #start at second column 
m <- ncol(test) # assign this to length of loop 
m 

for (i in 2:m) { 
    new_frame_[[i-1]] <- subset(test, select = c(Date, i)) 
    i <- i+1 
} 

我遇到這個How to create multiple data frames from a huge data frame using a loop? [closed],試圖將其應用到我的數據,但它沒有工作,所以我想一個循環會起作用。我對r很新。 非常感謝!

+0

我建議使用一個列表'升< - lapply(seq_along(DF)[ - 1],函數(x)的DF [,C(1,x)]的)'如果你必須把它們作爲單獨的對象,你可以命名列表元素,在這裏我將它們命名爲new_frame_1,_2,_3,然後做'list2env(setNames(l,paste0('new_frame_',seq_along(l))),envir = .GlobalEnv)'現在你有三個新的數據框對象,new_frame_1,new_frame_2,new_frame_3,在你的工作空間 – rawr

+0

感謝您的建議。在尋找解決方案時,我遇到了很多類似的問題,基本上那些回答問題的人總是建議使用一個列表。所以我也會嘗試。 –

回答

2

嘗試這種情況:

df <- read.table(textConnection(" 
Date    1   2   3 
01.01.1985   NA   NA   NA 
09.01.1985   NA   NA   NA 
17.01.1985 0.05173014 0.04578678 0.04326039 
25.01.1985   NA   NA   NA 
02.02.1985   NA   NA   NA 
10.02.1985 0.05835957 0.05499137 0.05497832") ,header=TRUE) 

for (i in 1:ncol(df[-1])) { 
assign(paste0("new_frame", i), cbind(df[1], df[-1][i])) 
} 
+0

謝謝,這正是我一直在尋找的。 –

相關問題