我有一个数据框,其中包括样品名称,测量模式和测量开始时间。测量是连续的,并且使用所有模式依次测量每个样品。
##example
df <- data.frame(sample= rep(c(1:10),each = 4,length.out=100),
mode =rep_len(c("A","B","C","D"),length.out = 100),
time= seq(strptime("2018-1-1 0:0:0","%Y-%m-%d %H:%M:%S"),by= dseconds(200),length.out=100))
对于每个样本,我需要获取一个由样本名称和模式“ B”的开始时间组成的ID。 我使用以下示例将其分组:
group <- function(x) cumsum(c(1, diff(x) != 0))
df$group <- group(df$sample)
然后我尝试使用
填充新列ID
library(dplyr)
df %>%
group_by(group) %>%
mutate(ID = paste(df$sample,
as.character(substr(df$time, start = 12,stop=16)),sep="_"))
但是该代码不起作用,此外它将粘贴所有开始时间,而不粘贴与模式“ B”相对应的时间。
答案 0 :(得分:1)
在mutate命令中,您不需要引用数据框(df)。您只需要引用列ID。我相信这段代码对您有用。
df%>%
group_by(group)%>%
mutate(ID = paste(sample,as.character(substr(time, start = 12,stop=16)),sep="_"))