我有一個像
date X1 X2 X3
4/16/2019 0:00 1 2 3
4/16/2019 7:00 1 2 3
4/172019 0:00 1 2 3
4/17/2019 7:00 1 2 3
我想得到
date time X1 X2 X3
4/16/2019 c(0,7) c(1,1) c(2,2) c(3,3)
4/17/2019 c(0,7) c(1,1) c(2,2) c(3,3)
其中X1是一個串列,X1[[1]]是一個向量,即c(1,1)。
有沒有一種有效的方法來實作這一目標?謝謝!
uj5u.com熱心網友回復:
在空格 ( \\s )處將“日期”拆分為“日期”、“時間”列,按“日期”分組,然后將summarise across所有列包裝在一個list
library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
separate(date, into = c('date', 'time'), sep = '\\s ') %>%
mutate(time = as.numeric(str_replace(time, ":", ".")) %>%
group_by(date) %>%
summarise(across(everything(), ~ list(.)))
-輸出
# A tibble: 2 × 5
date time X1 X2 X3
<chr> <list> <list> <list> <list>
1 4/16/2019 <dbl [2]> <int [2]> <int [2]> <int [2]>
2 4/17/2019 <dbl [2]> <int [2]> <int [2]> <int [2]>
資料
df1 <- structure(list(date = c("4/16/2019 0:00", "4/16/2019 7:00",
"4/17/2019 0:00",
"4/17/2019 7:00"), X1 = c(1L, 1L, 1L, 1L), X2 = c(2L, 2L, 2L,
2L), X3 = c(3L, 3L, 3L, 3L)),
class = "data.frame", row.names = c(NA,
-4L))
uj5u.com熱心網友回復:
這是您可以做到的另一種方法:邏輯:
- 單獨的日期和時間列(除了 with
separate,已經由 akrun 提供) - 團體
- 總結
across使用list和lambda paste(注意.names引數summarise - 再次使用
across和lambda paste0
library(dplyr)
library(readr)
df %>%
mutate(date = mdy_hm(date)) %>%
mutate(time = parse_number(sprintf("d", hour(date))), .before=2,
date = as.Date(ymd_hms(date))) %>%
group_by(date) %>%
summarise(across(everything(), list(~paste(.,collapse=",")), .names="{col}")) %>%
mutate(across(-date, ~paste0("c(",.,")")))
date time X1 X2 X3
<date> <chr> <chr> <chr> <chr>
1 2019-04-16 c(0,7) c(1,1) c(2,2) c(3,3)
2 2019-04-17 c(0,7) c(1,1) c(2,2) c(3,3)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327943.html
上一篇:MUIKeyboardDatePicker更改日期輸入框的樣式
下一篇:熊貓填寫日期
