我有以下简化的数据框架。
obj <- data.frame (id = c(1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2),
Date = c("1990-01", "1990-02", "1990-03", "1990-04", "1990-01", "1990-02", "1990-03", "1990-04", "1991-01", "1991-02", "1991-03", "1991-04", "1991-01", "1991-02", "1991-03", "1991-04"),
degree = c(1, 1, 1, 2, 1, 1, 0, 0, 1, 2, 2, 2, 1, 1, 2, 1)
)请注意,我的真实ID名类似于2.01811e+13
我想做的是:
degree变为2的日期,该列的值应为1,而对于相同的id,前面的观察值为1。对于每个degree =1时,新列的degree =0时,新列都应采用NA。H 211<degree>H 112对任何其他degree =2(因此,如果先前相同id观察的程度不是1),新列也应该是NA。H 214F 215请注意,在实际样本中,连续的id观测可能在多年内重叠,例如从1990-11、1990-12、1991-01、1991-02之间的ID。
应该是这样的,
id date new_col
1 1990-01 0
1 1990-02 0
1 1990-03 0
1 1990-04 1
2 1990-01 0
2 1990-02 0
2 1990-03 NA
2 1990-04 NA
1 1991-01 0
1 1991-02 1
1 1991-03 NA
1 1991-04 NA
2 1991-01 0
2 1991-02 0
2 1991-03 1
2 1991-04 0事先非常感谢!
发布于 2021-05-03 20:38:32
使用case_when()的tidyverse选项。
library(dplyr)
obj %>%
group_by(id) %>%
mutate(new_col = case_when(degree == 2 & lag(degree) == 1 ~ 1,
degree == 1 ~ 0,
T ~ NA_real_))
# # A tibble: 16 x 4
# # Groups: id [2]
# id Date degree new_col
# <dbl> <chr> <dbl> <dbl>
# 1 1 1990-01 1 0
# 2 1 1990-02 1 0
# 3 1 1990-03 1 0
# 4 1 1990-04 2 1
# 5 2 1990-01 1 0
# 6 2 1990-02 1 0
# 7 2 1990-03 0 NA
# 8 2 1990-04 1 0
# 9 1 1991-01 2 NA
# 10 1 1991-02 2 NA
# 11 1 1991-03 2 NA
# 12 1 1991-04 2 NA
# 13 2 1991-01 1 0
# 14 2 1991-02 1 0
# 15 2 1991-03 2 1
# 16 2 1991-04 2 NA发布于 2021-05-04 12:39:12
这是更新的reprex,其中的条件:如果自由度=2和以前的度数=1,那么new_col =1只保留相同的ID。
obj <- data.frame (id = c(1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2),
Date = c("1990-01", "1990-02", "1990-03", "1990-04", "1990-01", "1990-02", "1990-03", "1990-04", "1991-01", "1991-02", "1991-03", "1991-04", "1991-01", "1991-02", "1991-03", "1991-04"),
degree = c(1, 1, 1, 2, 1, 1, 0, 1, 2, 2, 2, 2, 1, 1, 2, 2)
)具有期望的输出
id date degree new_col
1 1990-01 1 0
1 1990-02 1 0
1 1990-03 1 0
1 1990-04 2 1
2 1990-01 1 0
2 1990-02 1 0
2 1990-03 0 NA
2 1990-04 1 0
1 1991-01 2 NA
1 1991-02 2 NA
1 1991-03 2 NA
1 1991-04 2 NA
2 1991-01 1 0
2 1991-02 1 0
2 1991-03 2 1
2 1991-04 2 NA诚挚的问候,
弗雷迪
https://stackoverflow.com/questions/67374927
复制相似问题