将上一行按组添加到R中的相应列

将上一行按组添加到R中的相应列,r,R,我将发布一个可复制的示例 id <- c(1,1,1,1,2,2,1,1) group <- c("a","b","c","d","a","b","c","d") df <- data.frame(id, group) 我只想提一下身份证的顺序。我有另一列作为时间戳。如果我理解并更正您的问题,您可以使用以下功能: id <- c(1,1,1,1,2,2,1,1) group <- c("a","b","c","d","a","b","c","d") df <

我将发布一个可复制的示例

id <- c(1,1,1,1,2,2,1,1)
group <- c("a","b","c","d","a","b","c","d")
df <- data.frame(id, group)

我只想提一下身份证的顺序。我有另一列作为时间戳。

如果我理解并更正您的问题,您可以使用以下功能:

id <- c(1,1,1,1,2,2,1,1)
group <- c("a","b","c","d","a","b","c","d")
df <- data.frame(id, group)

add_group2 <- function(df) {
  n <-length(group)
  group2 <- as.character(df$group[2:n])
  group2 <- c(group2, "-")
  group2[which(c(df$id[-n] - c(df$id[2:n]), 0) != 0)] <- "-"
  return(data.frame(df, group2))
}
add_group2(df)

如果我理解并更正您的问题,您可以使用以下功能:

id <- c(1,1,1,1,2,2,1,1)
group <- c("a","b","c","d","a","b","c","d")
df <- data.frame(id, group)

add_group2 <- function(df) {
  n <-length(group)
  group2 <- as.character(df$group[2:n])
  group2 <- c(group2, "-")
  group2[which(c(df$id[-n] - c(df$id[2:n]), 0) != 0)] <- "-"
  return(data.frame(df, group2))
}
add_group2(df)

一个包含
数据中的
dplyr
rleid
的解决方案。表

library(dplyr)

df %>% 
  mutate(id2 = data.table::rleid(id)) %>% 
  group_by(id2) %>% 
  mutate(group2 = lead(group))

# A tibble: 8 x 4
# Groups:   id2 [3]
     id group   id2 group2
  <dbl> <fct> <int> <fct> 
1  1.00 a         1 b     
2  1.00 b         1 c     
3  1.00 c         1 d     
4  1.00 d         1 NA    
5  2.00 a         2 b     
6  2.00 b         2 NA    
7  1.00 c         3 d     
8  1.00 d         3 NA    
库(dplyr)
df%>%
mutate(id2=data.table::rleid(id))%>%
分组依据(id2)%>%
突变(组2=铅(组))
#一个tibble:8x4
#组别:id2[3]
id组id2 group2
1.00 a 1 b
2 1.00 b 1 c
3 1.00 c 1 d
4 1.00 d 1 NA
5 2.00 a 2 b
6 2.00 b 2 NA
7 1.00 c 3 d
8 1.00 d 3 NA

一个包含
数据中的
dplyr
rleid
的解决方案。表

library(dplyr)

df %>% 
  mutate(id2 = data.table::rleid(id)) %>% 
  group_by(id2) %>% 
  mutate(group2 = lead(group))

# A tibble: 8 x 4
# Groups:   id2 [3]
     id group   id2 group2
  <dbl> <fct> <int> <fct> 
1  1.00 a         1 b     
2  1.00 b         1 c     
3  1.00 c         1 d     
4  1.00 d         1 NA    
5  2.00 a         2 b     
6  2.00 b         2 NA    
7  1.00 c         3 d     
8  1.00 d         3 NA    
库(dplyr)
df%>%
mutate(id2=data.table::rleid(id))%>%
分组依据(id2)%>%
突变(组2=铅(组))
#一个tibble:8x4
#组别:id2[3]
id组id2 group2
1.00 a 1 b
2 1.00 b 1 c
3 1.00 c 1 d
4 1.00 d 1 NA
5 2.00 a 2 b
6 2.00 b 2 NA
7 1.00 c 3 d
8 1.00 d 3 NA

这很好地解决了我的问题我想知道我是否想在组2中放置多个prev行,这可能吗?这很好地解决了我的问题我想知道我是否想在组2中放置多个prev行,这可能吗?