首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字符串创建列表/向量

从字符串创建列表/向量
EN

Stack Overflow用户
提问于 2019-08-17 01:44:56
回答 3查看 67关注 0票数 0

从数据框中,我正在读取包含医疗设备提交编号的列。理想情况下,一个医疗设备应该只有一个号码。然而,在某些情况下,存在具有多个数字的医疗设备。我想创建一个包含多个数字的列表。

因此,现在,当我遍历数据帧(deviceRecallsReports)列"k_numbers“时,我得到了以下输出:

代码语言:javascript
运行
复制
[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")。

我现在不确定如何剥离或取消列出这个。

EN

回答 3

Stack Overflow用户

发布于 2019-08-17 02:19:24

如果deviceCallreports是一个普通的data.frame,而你的列k_numbers是一个普通的字符列,我们可以解析它。唯一的问题是有两种不同类型的条目:普通文本条目和分离的向量。因此,尝试以下操作:

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2019-08-17 02:20:34

不确定实际的数据帧是如何构造的,但我假设它是这样的

代码语言:javascript
运行
复制
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来为每个医疗设备提交和设备代码获取一行。

票数 0
EN

Stack Overflow用户

发布于 2019-08-17 02:22:35

试一试

代码语言:javascript
运行
复制
purrr::map(deviceRecallsReports$k_numbers, ~if(grepl("^c", .x)) eval(parse(text = .x)) else .x)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57529009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档