2016-11-02 157 views
1

我想我所有的行都被轉換爲自己的列,所以一切都會在最後一行。這是我的數據框現在的樣子:如何將行轉換爲R數據框中的列?

track     time UTM_WGS84.Longitude UTM_WGS84.Latitude 
1  1 2015-10-14 23:59:55.711   5.481687   51.43635 
2  1 2015-10-14 23:59:55.717   5.481689   51.43635 
3  1 2015-10-14 23:59:55.723   5.481689   51.43635 
4  1 2015-10-14 23:59:55.730   5.481690   51.43635 
5  1 2015-10-14 23:59:55.763   5.481691   51.43635 
6  1 2015-10-14 23:59:55.804   5.481691   51.43635 
7  1 2015-10-14 23:59:55.840   5.481692   51.43635 
8  2 2015-10-14 23:59:55.882   5.481692   51.43635 
9  2 2015-10-14 23:59:56.031   5.481693   51.43635 
10  2 2015-10-14 23:59:56.041   5.481693   51.43635 
11  2 2015-10-14 23:59:56.047   5.481693   51.43635 
12  2 2015-10-14 23:59:56.053   5.481694   51.43635 
13  3 2015-10-14 23:59:56.081   5.481695   51.43635 
14  3 2015-10-14 23:59:56.121   5.481695   51.43635 
15  3 2015-10-14 23:59:56.165   5.481695   51.43635 

我不知道這是否是可行的,但是這就是我想要的列的樣子:

time1.1 - UTM_WGS84.Longitude1.1 - UTM_WGS84.Latitude1.1 - time1.2 - UTM_WGS84.Longitude1.2 - UTM_WGS84.Latitude1.2 - time2.1 - UTM_WGS84.Longitude2.1 - UTM_WGS84.Latitude2.1 

其中第一個數字是軌道第二個數字是該軌道的行。 我知道這是一個奇怪的請求,但我試圖找到一種方法將所有這些數據提供給機器學習方法來識別走路模式。

有關如何做到這一點的任何想法?

+2

請提供一個易於粘貼形式的數據,可能預期的結果是假設的方式看起來像。 –

+4

你有一個奇怪的機器學習方法。 – Roland

回答

1

檢查這個演示:

> df <- data.frame(track = c(2,1,5), A = c(1,2,3), B = c(100, 200, 300)) 
> df 
    track A B 
1  2 1 100 
2  1 2 200 
3  5 3 300 

如你所願,在最後一排,這意味着所有行合併到一個列表?所以:

> ls <- unlist(as.list(t(df))) 
> ls 
[1] 2 1 100 1 2 200 5 3 300 

但是如何處理列名呢?啞方法可以計算出:

> row.num <- row.names(df) 
> row.num 
[1] "1" "2" "3" 
> column.name <- colnames(df) 
> column.name 
[1] "track" "A"  "B"  
> track <- as.character(df$track) 
> track 
[1] "2" "1" "5" 

然後得到新的列名:

> new.column.names <- c() 
> for(i in 1:length(track)) { 
    for(k in 1:length(column.name)) { 
     str <- paste(column.name[k], track[i], sep = "") 
     str <- paste(str, row.num[i], sep = ".") 
     new.column.names <- c(new.column.names, str) 
     } 
    } 
> new.column.names 
[1] "track2.1" "A2.1"  "B2.1"  "track1.2" "A1.2"  "B1.2"  "track5.3" 
[8] "A5.3"  "B5.3" 

最後,分配lsnew.column.names到新的數據幀:

> new.df <- t(data.frame(ls)) 
> colnames(new.df) <- new.column.names 
> rownames(new.df) <- 1 

結果:

> new.df 
    track2.1 A2.1 B2.1 track1.2 A1.2 B1.2 track5.3 A5.3 B5.3 
1  2 1 100  1 2 200  5 3 300 
0

看看這是你想要什麼:

df=matrix(1:12,ncol=3) 
df 
#  [,1] [,2] [,3] 
#[1,] 1 5 9 
#[2,] 2 6 10 
#[3,] 3 7 11 
#[4,] 4 8 12 
c(t(df)) 
# [1] 1 5 9 2 6 10 3 7 11 4 8 12 

隨着數據幀

data.frame(t(c(t(df)))) 
# X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 
#1 1 5 9 2 6 10 3 7 11 4 8 12 
+0

謝謝,這是一個好的開始,但這是一個列表,我想要的是一個數據框。所有這些數字有可能有自己的專欄嗎? – Romy