R 填写从一个时间点(中间一个)到较早和较晚时间点的缺失值 id
使用R 填写从一个时间点(中间一个)到较早和较晚时间点的缺失值 id,r,R,使用fill()尝试这种tidyverse方法: 使用fill()尝试这种tidyverse方法: 使用ave id code time 1 1 abcd11 baseline 2 2 abcd11 baseline 3 3 abcd11 baseline 4 4 abcd11 baseline 5 5 abcd11 baseline 6 1 abcd11 screening 7 2 abcd11 screening 8 3 abcd
fill()
尝试这种tidyverse
方法:
使用
fill()
尝试这种tidyverse
方法:
使用
ave
id code time
1 1 abcd11 baseline
2 2 abcd11 baseline
3 3 abcd11 baseline
4 4 abcd11 baseline
5 5 abcd11 baseline
6 1 abcd11 screening
7 2 abcd11 screening
8 3 abcd11 screening
9 4 abcd11 screening
10 5 abcd11 screening
11 1 abcd11 3M
12 2 abcd11 3M
13 3 abcd11 3M
14 4 abcd11 3M
15 5 abcd11 3M
16 1 abcd11 6M
17 2 abcd11 6M
18 3 abcd11 6M
19 4 abcd11 6M
20 5 abcd11 6M
my.df使用ave
id code time
1 1 abcd11 baseline
2 2 abcd11 baseline
3 3 abcd11 baseline
4 4 abcd11 baseline
5 5 abcd11 baseline
6 1 abcd11 screening
7 2 abcd11 screening
8 3 abcd11 screening
9 4 abcd11 screening
10 5 abcd11 screening
11 1 abcd11 3M
12 2 abcd11 3M
13 3 abcd11 3M
14 4 abcd11 3M
15 5 abcd11 3M
16 1 abcd11 6M
17 2 abcd11 6M
18 3 abcd11 6M
19 4 abcd11 6M
20 5 abcd11 6M
my.df谢谢!不幸的是,它在实际数据集中无法正常工作。例如,参与者3的代码在最后一个时间点填入参与者4。我想这可能与每个参与者有不同的时间点有关?@snetlogo尝试添加真实数据样本,以便正确理解问题!您可以对该操作使用dput()
,并将输出粘贴到问题中@snetlogo尝试为每个id添加group\u by()
语句,如果没有真实数据,我无法提供正确的解决方案!好的,谢谢!我在真实数据集中使用了group_by(id),然后在您的新数据中再次使用了dput(如上更改)@snetlogo如何填充值?谢谢!不幸的是,它在实际数据集中无法正常工作。例如,参与者3的代码在最后一个时间点填入参与者4。我想这可能与每个参与者有不同的时间点有关?@snetlogo尝试添加真实数据样本,以便正确理解问题!您可以对该操作使用dput()
,并将输出粘贴到问题中@snetlogo尝试为每个id添加group\u by()
语句,如果没有真实数据,我无法提供正确的解决方案!好的,谢谢!我在真实数据集中使用了group_by(id),然后在新数据中再次使用了dput(如上更改)@snetlogo如何填充值?
id code time
1 1 abcd11 baseline
2 2 abcd11 baseline
3 3 abcd11 baseline
4 4 abcd11 baseline
5 5 abcd11 baseline
6 1 abcd11 screening
7 2 abcd11 screening
8 3 abcd11 screening
9 4 abcd11 screening
10 5 abcd11 screening
11 1 abcd11 3M
12 2 abcd11 3M
13 3 abcd11 3M
14 4 abcd11 3M
15 5 abcd11 3M
16 1 abcd11 6M
17 2 abcd11 6M
18 3 abcd11 6M
19 4 abcd11 6M
20 5 abcd11 6M
my.df <- transform(my.df, code=ave(code, id, FUN=function(x)
rep(unique(na.omit(x)), length(x))))
my.df
# id time code
# 1 3 baseline_arm_1 1bmbf816
# 2 3 log_arm_1 1bmbf816
# 3 3 prebaseline_arm_1 1bmbf816
# 4 3 screening_arm_1 1bmbf816
# 5 3 v2a_follow_up__tel_arm_1 1bmbf816
# 6 3 v2b_follow_up__pro_arm_1 1bmbf816
# 7 3 v2c_follow_up__wb_arm_1 1bmbf816
# 8 3 v3a_follow_up__tel_arm_1 1bmbf816
# 9 3 v4a_follow_up__tel_arm_1 1bmbf816
# 10 3 v5a_follow_up__tel_arm_1 1bmbf816
# 11 3 v5c_follow_up__wb_arm_1 1bmbf816
# 12 4 baseline_arm_1 1jqrc869
# 13 4 log_arm_1 1jqrc869
# 14 4 prebaseline_arm_1 1jqrc869
# 15 4 screening_arm_1 1jqrc869
# 16 4 v2a_follow_up__tel_arm_1 1jqrc869
# 17 4 v2b_follow_up__pro_arm_1 1jqrc869
# 18 7 baseline_arm_1 1wxyz123
# 19 7 log_arm_1 1wxyz123
# 20 7 prebaseline_arm_1 1wxyz123
# 21 7 screening_arm_1 1wxyz123
my.df <- structure(list(id = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 4L, 4L, 4L, 4L, 4L, 4L, 7L, 7L, 7L, 7L), time = c("baseline_arm_1",
"log_arm_1", "prebaseline_arm_1", "screening_arm_1", "v2a_follow_up__tel_arm_1",
"v2b_follow_up__pro_arm_1", "v2c_follow_up__wb_arm_1", "v3a_follow_up__tel_arm_1",
"v4a_follow_up__tel_arm_1", "v5a_follow_up__tel_arm_1", "v5c_follow_up__wb_arm_1",
"baseline_arm_1", "log_arm_1", "prebaseline_arm_1", "screening_arm_1",
"v2a_follow_up__tel_arm_1", "v2b_follow_up__pro_arm_1", "baseline_arm_1",
"log_arm_1", "prebaseline_arm_1", "screening_arm_1"), code = c(NA,
NA, NA, "1bmbf816", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "1jqrc869",
NA, NA, NA, NA, NA, "1wxyz123")), row.names = c("1", "2", "3",
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21"), class = "data.frame")