且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

基于多列和多行条件扩展 R 数据框

更新时间:2023-11-18 23:01:22

complete中获取SFmax值并使用seq 而不是 full_seq 因为

Get max value of SF in complete and use seq instead of full_seq because

full_seq(2:4, 1) #gives
#[1] 2 3 4
#whereas
seq(max(2:4)) #gives
#[1] 1 2 3 4

那就试试吧

library(dplyr)
library(tidyr)

DF1 %>%
  group_by(ID) %>% 
  mutate(SF= pmax(X_F, Y_F, na.rm = T)) %>%
  complete(SF = seq(max(SF)))


#   ID       SF   X_F   X_A   Y_F   Y_A
#   <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 A         1    NA  NA      NA  NA  
# 2 A         2     1   0.1     2   0.2
# 3 A         3     2   0.2     3   0.3
# 4 A         4     4   0.4    NA  NA  
# 5 A         5     3   0.3     5   0.4
# 6 A         6    NA  NA      NA  NA  
# 7 A         7     5   0.5     7   0.7
# 8 B         1    NA  NA       1   0.1
# 9 B         2    NA  NA      NA  NA  
#10 B         3    NA  NA       3   0.2
#11 B         4    NA  NA       4   0.7
#12 C         1     1   0.2     1   0.1
#13 C         2     2   0.3    NA  NA  
#14 C         3     3   0.4     3   0.3
#15 C         4     4   0.5     4   0.4
#16 C         5     5   0.6     5   0.5

要使用 full_seq 获得预期输出,您可以在向量中添加 1


To get your expected output with full_seq you could add 1 in the vector

DF1 %>%
  group_by(ID) %>% 
  mutate(SF= pmax(X_F, Y_F, na.rm = T)) %>%
  complete(SF = full_seq(c(1, SF), 1))