我在R Studio中具有以下数据框
DF1<-data.frame('X_F'=c(1,2,3,4,5, NA, NA, NA, 1,2,3,4,5), "X_A"=c(.1,.2,.3,.4,.5, NA, NA, NA, .2,.3,.4, .5,.6),"Y_F"=c(2,3,5,NA, 7, 1,3, 4, 1,NA,3,4,5), "Y_A"=c(.2,.3,.4,NA, .7, .1,.2,.7,.1,NA, .3,.4,.5),'ID'=c("A", "A", "A", "A", "A", "B", "B", "B", "C", "C", "C","C",'C'))
数据帧由5列组成-用于标识每组的ID ID列和两组参数X_F,Y_F和对应的A值集X_A,Y_A。
数据框如下所示。
X_F X_A Y_F Y_A ID
1 0.1 2 0.2 A
2 0.2 3 0.3 A
3 0.3 5 0.4 A
4 0.4 NA NA A
5 0.5 7 0.7 A
NA NA 1 0.1 B
NA NA 3 0.2 B
NA NA 4 0.7 B
1 0.2 1 0.1 C
2 0.3 NA NA C
3 0.4 3 0.3 C
4 0.5 4 0.4 C
5 0.6 5 0.5 C
我想通过扩展上述数据框来获得以下数据框。扩展的数据框将有一个称为SF的额外列。 SF的价值 由ID分组的X_F,Y_F列范围得出。此范围的每一步均以值1分隔
ID SF X_F X_A Y_F Y_A
1 A 1 1 0.1 1 NA
2 A 2 2 0.2 2 0.2
3 A 3 3 0.3 3 0.3
4 A 4 4 0.4 4 NA
5 A 5 5 0.5 5 0.4
6 A 6 6 NA 6 NA
7 A 7 7 NA 7 0.7
8 B 1 1 NA 1 0.1
9 B 2 2 NA 2 NA
10 B 3 3 NA 3 0.2
11 B 4 4 NA 4 0.7
12 C 1 1 0.2 1 0.1
13 C 2 2 0.3 2 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
我尝试了这种方法以获得所需的结果。
library(dplyr)
library(tidyr)
DF1
DF2<-DF1%>%group_by(ID)%>% mutate(SF=pmax(X_F, Y_F, na.rm = T))%>%
complete(SF=(full_seq(SF ,1)))
与上面的预期输出相反,我得到了以下输出
ID SF X_F X_A Y_F Y_A
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
A 2 1 0.1 2 0.2
A 3 2 0.2 3 0.3
A 4 4 0.4 NA NA
A 5 3 0.3 5 0.4
A 6 NA NA NA NA
A 7 5 0.5 7 0.7
B 1 NA NA 1 0.1
B 2 NA NA NA NA
B 3 NA NA 3 0.2
B 4 NA NA 4 0.7
C 1 1 0.2 1 0.1
C 2 2 0.3 NA NA
C 3 3 0.4 3 0.3
C 4 4 0.5 4 0.4
C 5 5 0.6 5 0.5
我请求某人帮助。无法解决这个问题
答案 0 :(得分:0)
在max
中获取SF
的{{1}}值,并使用complete
代替seq
,因为
full_seq
所以尝试做
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
的预期输出,可以在向量中加1
full_seq