将上一行按组添加到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行,这可能吗?