在R Dataframe 中如何区分带数字的文本和真实的?

vzgqcmou  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(72)

我有一个数据集,其中参数和数字串在引号(')中。我想首先将整个文本与数字分开。然后通过去掉引号来清理它。

df <- data.frame( test =  c("'+ test1           0.0553933412'", "'<All variables>  0.0553799779'", "'+ test3           0.0009441928'", 
                            "'<none>           0.0000000000'","'+ test2          -0.0012808645'"))

我尝试了下面的方法,问题是带有text 1、2和3的数字也被分开了,我还想去掉这两列中的+和
编辑:多亏了@GregorThomas,我才能把它们分成行。我还想去掉两列中的+、〈、〉和

library(tidyr)
df  <- df  %>%
       separate(test, 
       into = c("text", "num"), 
       sep =  c(" {2,}")
       )

n3schb8v

n3schb8v1#

更新:利用可以拆分至少有两个空格的列这一事实,可以重写为:

library(tidyverse)

df <- data.frame( test =  c("'+ test1           0.0553933412'", "'<All variables>  0.0553799779'", "'+ test3           0.0009441928'", 
                            "'<none>           0.0000000000'","'+ test2          -0.0012808645'"))

df |>
  separate_wider_delim(
    test,
    delim = stringr::regex("\\s{2,}"),
    names = c("name", "value")
  ) |> 
  mutate(
    value = parse_number(value),
    name = str_trim(str_remove_all(name, "['+<>]"))
  )
#> # A tibble: 5 × 2
#>   name              value
#>   <chr>             <dbl>
#> 1 test1          0.0554  
#> 2 All variables  0.0554  
#> 3 test3          0.000944
#> 4 none           0       
#> 5 test2         -0.00128

创建于2023年3月8日,使用reprex v2.0.2

nbysray5

nbysray52#

或者,您可以使用mutate_all在所有列中进行修剪(去除符号)。
在这种情况下,您的代码将是:

library(tidyverse)
df <- data.frame( test =  c("'+ test1           0.0553933412'",
                            "'<All variables>  0.0553799779'",
                            "'+ test3           0.0009441928'", 
                            "'<none>           0.0000000000'",
                            "'+ test2          -0.0012808645'"))

df  <- df  %>%
  separate(test, 
           into = c("text", "num"), 
           sep =  c(" {2,}")
  ) %>%
mutate_all(~ str_trim(str_remove_all(., "['+<>]")))

相关问题