2017-06-01 114 views
1

问题和数据

我有以下数据框。对于每个time_frame,对应的值都在对角线上。下面是创建该数据帧代码:如何提取R中数据帧对角线的值?

> dput(foo) 
structure(list(time_frame = c(20948, 23748, 24026, 24350, 24462 
), col1 = c(1, 1, 1, 1, 1), col2 = c(2, 2, 2, 2, 2), col3 = c(1, 
1, 1, 1, 1), col4 = c(3, 3, 3, 3, 3), col5 = c(1, 1, 1, 1, 1)), .Names = c("time_frame", 
"col1", "col2", "col3", "col4", "col5"), row.names = c(NA, -5L 
), class = "data.frame") 

enter image description here

所需的输出和我试过

我所需的输出是以下几点:

foo2 <- data.frame(time_frame = c(20948, 23748, 24026, 24350, 24462), 
        turn_signal_state = c(1,2,1,3,1)) 

我不知道有什么获得此输出的最佳方法。所以,我想tidyr包如下:

library(tidyr) 
foo %>% 
    gather(col, turn_signal_state, -time_frame) 

但是你看,这不正是我需要的。请指导我将什么是将foo转换为foo2的最佳方法。我更喜欢使用tidyverse。此外,原始文件是我使用read.delim阅读的文本文件。请让我知道是否有可能首先阅读foo2格式。谢谢。

回答

3

为了提供一个答案所以这个问题可以被关闭,您可以将您的数据帧简单地转换为一个矩阵,然后使用diag功能,像这样的缘故:

diag(as.matrix(foo[, -1]))

你只需要忽略第一列,因为你不想包含在你的结果向量中。