【发布时间】:2019-11-01 04:52:45
【问题描述】:
我有一个如下所示的数据框
test_df <- data.frame("SN" = c("ABC123","ABC123","ABC123","MNO098","MNO098","MNO098"),
"code" = c("ABC1111","DEF222","GHI133","","MNO1123","MNO567"),
"d_time" = c("2220-08-27","2220-05-27","2220-02-27","2220-11-27","2220-02-27",""))
我正在尝试做两件事
1) 通过从列 SN 和 code 中删除字母来创建 2 个新列 (p_id,v_id) 并仅保留 9 位数字
2) 根据v_id 为每个人创建一个滞后列 (p_vid),每个人根据他/她的d_time 排序
t_df <- test_df %>% group_by(SN)
t_df %>% arrange((d_time), .by_group = TRUE) ->> sorted_df #sorted based on d_time
transform_ids = function(DF){ # this function is to create person and visit_occurrence ids
DF %>%
mutate(p_id = as.integer(str_remove_all(.$SN,"[a-z]|[A-Z]") %>% #retaining only the numeric part
str_sub(1,9))) %>%
mutate(v_id = as.integer(str_remove_all(.$code,"[a-z]|[A-Z]") %>%
str_sub(1,9))) %>%
group_by(p_id) %>%
mutate(pre_vid = lag(v_id)) %>%
ungroup
}
transform_ids(sorted_df)
但是当我这样做时,我遇到了以下错误
视图中的错误:列
p_id的长度必须为 3(组大小)或 1,而不是 6 错误:列p_id的长度必须为 3(组大小)或 1,而不是 6 另外:警告信息: 在视图中(transform_ids(t_df)): 显示回溯 使用调试重新运行 错误:列p_id的长度必须为 3(组大小)或 1,而不是 6
我希望我的输出如下所示。基本上,我试图将一个人的每个v_id 链接到他之前的访问,即p_vid
【问题讨论】:
标签: r dataframe dplyr purrr tibble