R 如何为列中的循环名称设置唯一ID
我的数据包括随时间变化的患者样本,类型各不相同。该数据超过10197次观测。我的数据的一个(小)示例是:R 如何为列中的循环名称设置唯一ID,r,R,我的数据包括随时间变化的患者样本,类型各不相同。该数据超过10197次观测。我的数据的一个(小)示例是: PatientName <- c("Jones", "Jones", "Jones", "Smith", "Smith", "Nixon", "Nixon", "Nixon") SampleType <- c("Venous", "Arterial", "Capillary", "Venous", "Venous", "Venous", "Venous", "Capillary"
PatientName <- c("Jones", "Jones", "Jones", "Smith", "Smith", "Nixon", "Nixon", "Nixon")
SampleType <- c("Venous", "Arterial", "Capillary", "Venous", "Venous", "Venous", "Venous", "Capillary")
DayTested <- c("Monday", "Tuesday", "Wednesday", "Monday", "Monday", "Monday", "Monday", "Tuesday")
df <- data.frame(PatientName, SampleType, DayTested)
PatientName我们可以使用ave
df$ID <- with(df, as.integer(ave(as.character(SampleType),
PatientName, DayTested, FUN = seq_along)))
df$ID
#[1] 1 1 1 1 2 1 2 1
df$ID不是100%您想要的,但这会给出所需的结果
df$ID <- duplicated(df) + 1
df$IDakrun的答案非常完美。只是为了用dplyr
和cumsum
函数显示不同的方式
df %>% mutate(id = 1) %>% group_by(PatientName, SampleType, DayTested) %>%
mutate(id = cumsum(id)) %>% ungroup()
你能更详细地解释一下吗。如果在第7行之后有额外的一行,会发生什么呢?你可以用(df,ave(as.integer(SampleType),PatientName,DayTested,FUN=seq_-along))
@lmo谢谢,我之前已经考虑过了,
df$ID <- duplicated(df) + 1
df %>% mutate(id = 1) %>% group_by(PatientName, SampleType, DayTested) %>%
mutate(id = cumsum(id)) %>% ungroup()