调查的时间戳将我的所有数据分组到“开始时间”下的一列中,但我需要将数据分为上午和下午组。
例如,现在我的数据看起来像
8:37 PM
3:58 PM
10:22 AM
2:48 PM
6:33 PM
7:10 AM
10:59 AM
Run Code Online (Sandbox Code Playgroud)
但我需要把它分成
8:37 PM 10:22 AM
3:58 PM 7:10 AM
2:48 PM 10:59 AM
6:33 PM
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点有什么想法吗?谢谢
您可以使用split
split(df1, grepl('PM', df1$StartTime))
Run Code Online (Sandbox Code Playgroud)
如果您需要获取具有两列的 data.frame
lst <- split(df1$StartTime, grepl('PM', df1$StartTime))
setNames(data.frame(lapply(lst, `length<-`, max(lengths(lst)))),
c('AM', 'PM'))
# AM PM
#1 10:22 AM 8:37 PM
#2 7:10 AM 3:58 PM
#3 10:59 AM 2:48 PM
#4 <NA> 6:33 PM
Run Code Online (Sandbox Code Playgroud)
或者
library(data.table)#v1.9.5+
dcast(setDT(df1)[, group:= c('AM', 'PM')[grepl('PM', StartTime)+1L]][,
N:=1:.N, group], N~group, value.var='StartTime')
# N AM PM
#1: 1 10:22 AM 8:37 PM
#2: 2 7:10 AM 3:58 PM
#3: 3 10:59 AM 2:48 PM
#4: 4 NA 6:33 PM
Run Code Online (Sandbox Code Playgroud)
或者使用dplyr/tidyr
library(dplyr)
library(tidyr)
df1 %>%
extract(StartTime, into='AMPM', '[^ ]+\\s+([^ ]+)', remove=FALSE) %>%
group_by(AMPM) %>%
mutate(n=row_number()) %>%
spread(AMPM, StartTime)
Run Code Online (Sandbox Code Playgroud)
df1 <- structure(list(StartTime = c("8:37 PM", "3:58 PM", "10:22 AM",
"2:48 PM", "6:33 PM", "7:10 AM", "10:59 AM")), .Names = "StartTime",
class = "data.frame", row.names = c(NA, -7L))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |