如何将R数据框中的行转换为列?

我想将所有行转换为各自的列,最终所有数据都在一行中。我的数据框当前看起来是这样的:

   track                    time UTM_WGS84.Longitude UTM_WGS84.Latitude1       1 2015-10-14 23:59:55.711            5.481687           51.436352       1 2015-10-14 23:59:55.717            5.481689           51.436353       1 2015-10-14 23:59:55.723            5.481689           51.436354       1 2015-10-14 23:59:55.730            5.481690           51.436355       1 2015-10-14 23:59:55.763            5.481691           51.436356       1 2015-10-14 23:59:55.804            5.481691           51.436357       1 2015-10-14 23:59:55.840            5.481692           51.436358       2 2015-10-14 23:59:55.882            5.481692           51.436359       2 2015-10-14 23:59:56.031            5.481693           51.4363510      2 2015-10-14 23:59:56.041            5.481693           51.4363511      2 2015-10-14 23:59:56.047            5.481693           51.4363512      2 2015-10-14 23:59:56.053            5.481694           51.4363513      3 2015-10-14 23:59:56.081            5.481695           51.4363514      3 2015-10-14 23:59:56.121            5.481695           51.4363515      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

其中第一个数字是轨迹,第二个数字是该轨迹的行号。我知道这是一个奇怪的请求,但我正在尝试找到一种方法,将所有这些数据提供给机器学习方法来识别步行模式。

关于如何做到这一点,有什么想法吗?


回答:

查看这个演示:

> df <- data.frame(track = c(2,1,5), A = c(1,2,3), B = c(100, 200, 300))> df  track A   B1     2 1 1002     1 2 2003     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.31        2    1  100        1    2  200        5    3  300

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注