R:基于单列因子将每2行数据重整为1行

问题描述 投票:1回答:1

我有以下数据:

              TimeStamp      Fab23.A   start.end
1   2020-03-02 20:44:00     27.54236       start
2   2020-03-02 20:50:00    186.08670         end
3   2020-03-03 18:12:00     37.33132       start
4   2020-03-03 18:16:00    189.78060         end
5   2020-03-04 17:48:00     33.78360       start
6   2020-03-04 17:52:00    190.08100         end
.
.
.

我正在根据最后一列的最后分类值将它们重塑为以下格式:

        start.TimeStamp          end.TimeStamp    start.Fab23.A    start.Fab23.A
1   2020-03-02 20:44:00    2020-03-02 20:50:00         27.54236        186.08670     
2   2020-03-03 18:12:00    2020-03-03 18:16:00         37.33132        189.78060    
3   2020-03-04 17:48:00    2020-03-04 17:52:00         33.78360        190.08100    
.
.
.

我尝试过重塑和融化功能,但无济于事。将不胜感激任何建议。

r reshape
1个回答
1
投票

您可以使用:

library(dplyr)

df %>%
  group_by(start.end) %>%
  mutate(row = row_number()) %>%
  tidyr::pivot_wider(names_from = start.end, 
                    values_from = c(TimeStamp, Fab23.A)) %>%
  select(-row)

# A tibble: 3 x 4
#  TimeStamp_start    TimeStamp_end      Fab23.A_start Fab23.A_end
#  <chr>              <chr>                      <dbl>       <dbl>
#1 2020-03-0220:44:00 2020-03-0220:50:00          27.5        186.
#2 2020-03-0318:12:00 2020-03-0318:16:00          37.3        190.
#3 2020-03-0417:48:00 2020-03-0417:52:00          33.8        190.

或使用data.table

library(data.table)
dcast(setDT(df), rowid(start.end)~start.end,value.var = c("TimeStamp", "Fab23.A"))

数据

df <- structure(list(TimeStamp = c("2020-03-0220:44:00", "2020-03-0220:50:00", 
"2020-03-0318:12:00", "2020-03-0318:16:00", "2020-03-0417:48:00", 
"2020-03-0417:52:00"), Fab23.A = c(27.54236, 186.0867, 37.33132, 
189.7806, 33.7836, 190.081), start.end = c("start", "end", "start", 
"end", "start", "end")), class = "data.frame", row.names = c(NA, -6L))
© www.soinside.com 2019 - 2024. All rights reserved.