我正在从数据框中读取包含医疗设备提交编号的列。理想情况下,医疗设备应仅关联一个数字。但是,在某些情况下,医疗设备具有多个编号。我想创建一个包含多个数字的列表。
现在,当我在数据框(deviceRecallsReports)列“ k_numbers”中循环时,得到以下输出:
[1] "K020386"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "K082829"
[1] "K043520"
[1] "c(\"K040738\", \"K061414\")"
[1] "K080391"
[1] "K991569"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "K063454"
[1] "K053240"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "K043520"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "K141967"
[1] "c(\"K032509\", \"K093308\", \"K082566\")"
[1] "K991569"
[1] "K013931"
for (row in 1:nrow(deviceRecallsReports))
{
knum <- deviceRecallsReports[row, "k_numbers"]
print(paste(knum))
}
仅使用一个数字(例如“ K020386”或“ K991569”)的行就可以了。但是,对于假定列表“ c(\“ K032509 \”,\“ K093308 \”,\“ K082566 \”)“中的多个数字的其余行,我想创建实际的R向量或列表, 。所以我想要一个向量/列表将是: (“ K032509”,“ K093308”,“ K082566”)。
我不确定现在如何删除或取消列出此内容。
答案 0 :(得分:0)
如果deviceCallreports
是普通的data.frame,而您的列k_numbers
是普通的字符列,我们可以对其进行解析。
唯一的问题是,存在两种不同类型的条目。普通的文本条目和不完整的向量。因此,请尝试以下操作:
my_parse <- function(s) {
tryCatch({ eval(parse(text=s)) }, error = function(e) { s })
}
# either
knum <- my_parse(deviceRecallsReports[row, "k_numbers"])
# or
sapply(deviceRecallsReports$k_numbers, my_parse)
答案 1 :(得分:0)
不确定实际数据帧的结构,但我假设它是这样的
library (tidyverse)
df <- tibble(
med_device_string = c(
"K020386",
"c(\"K032509\", \"K093308\", \"K082566\")",
"K082829",
"K043520",
"c(\"K040738\", \"K061414\")",
"K080391",
"K991569",
"c(\"K032509\", \"K093308\", \"K082566\")"
)
) %>%
rowid_to_column("med_device_number")
df %>%
mutate(med_device_string = str_remove_all(med_device_string, 'c\\(\\"|\\"\\)')) %>%
mutate(med_device_list = str_split(med_device_string, pattern = '\\", \\"')) %>%
select(-med_device_string)
新列将包含单个字符串的列表。在此之后,您始终可以致电unnest
来获取每个医疗设备提交和设备代码的行。
答案 2 :(得分:0)
尝试
purrr::map(deviceRecallsReports$k_numbers, ~if(grepl("^c", .x)) eval(parse(text = .x)) else .x)