2016-11-02 106 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