调查中的时间戳将所有数据分组到StartTime下的一列中,但是我需要将数据分为AM和PM组。
例如,现在我的数据看起来像
8:37 PM
3:58 PM
10:22 AM
2:48 PM
6:33 PM
7:10 AM
10:59 AM
但我需要将其分为
8:37 PM 10:22 AM
3:58 PM 7:10 AM
2:48 PM 10:59 AM
6:33 PM
有关如何执行此操作的任何想法?谢谢
最佳答案
您可以使用split
split(df1, grepl('PM', df1$StartTime))
如果需要获取包含两列的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
要么
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
或使用
dplyr/tidyr
library(dplyr)
library(tidyr)
df1 %>%
extract(StartTime, into='AMPM', '[^ ]+\\s+([^ ]+)', remove=FALSE) %>%
group_by(AMPM) %>%
mutate(n=row_number()) %>%
spread(AMPM, StartTime)
数据
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))
关于r - R:如何将列表拆分为AM/PM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30550928/