首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串转换为整洁的跳转。

将字符串转换为整洁的跳转。
EN

Stack Overflow用户
提问于 2020-03-09 05:34:38
回答 2查看 162关注 0票数 1
代码语言:javascript
复制
> dd <- tibble("Temper: 36.6℃  Pulse:76 bpm RR: 16bpm BP:148/58 mmHg")
> dd
# A tibble: 1 x 1
  `"Temper: 36.6℃  Pulse:76 bpm RR: 16bpm BP:148/58 mmHg"`
  <chr>                                                    
1 Temper: 36.6℃  Pulse:76 bpm RR: 16bpm BP:148/58 mmHg    
> ddtarget <- tibble(Temper=36.6,Pulse=76,RR=16,SBP=148,DBP=58)
> ddtarget
# A tibble: 1 x 5
  Temper Pulse    RR   SBP   DBP
   <dbl> <dbl> <dbl> <dbl> <dbl>
1   36.6    76    16   148    58

我有一个dd,我想得到一个dd目标;我如何通过使用map或其他有趣的tidyverse来实现它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-09 06:28:56

我们可以首先使用rename列(因为它的名字很奇怪),在空白上以不同的行分割数据,然后用大写字母获取数据,在冒号上得到不同列中的数据,最后使用pivot_wider获取宽格式的数据。

代码语言:javascript
复制
library(dplyr)
library(tidyr)

dd %>%
  rename(col = `"Temper: 36.6℃  Pulse:76 bpm RR: 16bpm BP:148/58 mmHg"`) %>%
  separate_rows(col, sep = "\\s+(?=[A-Z])") %>%
  separate(col, into = c('name', 'value'), sep = ':|:') %>%
  pivot_wider()

# A tibble: 1 x 4
#  Temper   Pulse  RR       BP         
#  <chr>    <chr>  <chr>    <chr>      
#1 " 36.6℃" 76 bpm " 16bpm" 148/58 mmHg
票数 5
EN

Stack Overflow用户

发布于 2020-03-09 10:59:17

以下是一个混乱的解决方案:

代码语言:javascript
复制
# String to convert to tibble: 

library(tidyverse)

dd <- tibble("Temper: 36.6℃  Pulse:76 bpm RR: 16bpm BP:148/58 mmHg")

# Store a vector of strings to become variables: 

dd_vars <-
  grep(":", unlist(lapply(strsplit(as.character(dd), "\\d+"),
                          function(w) {
                            x <- gsub(".* ", "", trimws(w, "both"))
                            y <- as.character(na.omit(ifelse(nchar(x) == 1, NA, x)))
                          })),
       value = TRUE)

# Store a vector of the strings to become values: 

dd_values <- iconv(gsub("[A-Za-z]", "", grep("\\d+", unlist(
  lapply(strsplit(as.character(dd), ":"),
         function(x) {
           gsub(" .*", "", trimws(x, "both"))
         })
),
value = TRUE)), 'utf-8', 'ascii', sub = '')

# Convert to a tibble with appropriate vectors: 

tib <-
  as_tibble(data.frame(lapply(within(setNames(
    data.frame(t(
      data.frame(vars = dd_vars,
                 values = as.character(dd_values))
    ),
    stringsAsFactors = FALSE),
    gsub(":", "", dd_vars)
  )[-1, ],
  {
    SBP <- unlist(strsplit(BP, "/"))[1]
    DBP <- unlist(strsplit(BP, "/"))[2]
    rm(BP)
  }), as.numeric)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60595176

复制
相关文章

相似问题

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