如果我的.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] 删除。
我来说两句