R扫描数据帧中的字符,但仅在参数列中

斯瓦金斯先生

如果我的.csv看起来像这样(名称和位置已更改,以保护无辜者),并且作为数据帧df读取

     Species          Place  param1 param2 param3
1     D.lice        on head 123.123     39  65.43
2 X.elephant        up butt 234.400  *****       
3   B.booger        in nose  32.000   <NA>  $%(*0
4    F.farts      blame dog  -9.990     43       

我怎么会删除所有人物“细胞”和一个空值“”(NOT NULL)取代他们,只留下数字(和,重要的是,有NUM(或数字)类型的列,这样我可以阻止这样的错误Error in hist.default(testParam) : 'x' must be numeric在那里testParam是专栏之一?

我想到了sweep,并且一直在尝试的各种实现replace,但是我似乎无法使它们中的任何一个都起作用,它们只影响参数列,并且它们可以从中插入任何可能的字符/字符串。各种参数生成器。

您可以尝试在param仅包含数字(可能带有一个点)的列中检测值,并替换不包含的值,然后将其转换为数字。

例:

df <- data.frame(
  species = letters[1:5],
  param1 = c("123.56", "23", "ds%", "12.ab", "123"),
  param2 = c("%23", "43.23", "abc", "45", "0.23"),
  stringsAsFactors = FALSE
)

library(dplyr)
library(stringr)

df %>%
  mutate(
    across(
      matches("^param[0-9]+"),
      ~ifelse(str_detect(.x, "^[0-9]+\\.{0,1}[0-9]*$"), .x, NA_character_) %>%
        as.numeric()
    )
  )

给出:

  species param1 param2
1       a 123.56     NA
2       b  23.00  43.23
3       c     NA     NA
4       d     NA  45.00
5       e 123.00   0.23

其中param列为数字。

注意:param列必须是字符而不是因素。如果它们是因素,则需要将它们转换为字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章