在R中按条件粘贴并按组粘贴

时间:2018-07-26 16:54:58

标签: r dplyr

我有一个数据框,其中包括样品名称,测量模式和测量开始时间。测量是连续的,并且使用所有模式依次测量每个样品。

##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”相对应的时间。

1 个答案:

答案 0 :(得分:1)

在mutate命令中,您不需要引用数据框(df)。您只需要引用列ID。我相信这段代码对您有用。

 df%>%
  group_by(group)%>%
  mutate(ID = paste(sample,as.character(substr(time, start = 12,stop=16)),sep="_"))