R 如何对矢量进行质量校正及向数值的转换
我有一个大的字符向量,包含我需要更正的数字,然后转换为数字向量,例如:R 如何对矢量进行质量校正及向数值的转换,r,character,apply,R,Character,Apply,我有一个大的字符向量,包含我需要更正的数字,然后转换为数字向量,例如: data.f我们可以用替换,,并使用parse\u number提取数字 readr::parse_number(gsub(",", ".", data.f)) #[1] 11.23 34.32 21.10 if/else是矢量化的,不像if/else(一次只取一个元素)。因此,我们实际上不需要循环函数(sapply循环向量的每个元素,对于向量,单位是单个元素) ifelse(nchar(data.f)
data.f我们可以用
替换,
,并使用parse\u number
提取数字
readr::parse_number(gsub(",", ".", data.f))
#[1] 11.23 34.32 21.10
if/else
是矢量化的,不像if/else
(一次只取一个元素)。因此,我们实际上不需要循环函数(sapply
循环向量的每个元素,对于向量,单位是单个元素)
ifelse(nchar(data.f)<6,as.numeric(data.f),
as.numeric(substr(gsub(',',',',',data.f),1,5)))
#[1] 11.23 34.32 21.10
注意:nchar
、substr
、ifelse
、as.numeric
和gsub
都可以采用长度大于1的向量。看起来不错,工作也不错。谢谢!但是,您能否通过使用apply族向变量中的每个值应用函数的示例?我的代码有什么问题?@NikitaSnegirevifelse
已矢量化。所以这里不需要循环sapply
循环遍历每个元素(这里的单位是向量的单个元素),然后应用ifelse
。相反,ifelse
可以直接应用于整个数据集,这与if/else
@NikitaSnegirev不同。你可以使用ifelse(nchar(data.f)<6,as.numeric(data.f),as.numeric(substr(gsub(',',',',',data.f),1,5)))
当您将字符转换为数值时,会出现友好的警告,因为它会对完整数据进行转换
attributes(num)
$names
[1] "11.23" "34,32 + 12,17" "21.1"
readr::parse_number(gsub(",", ".", data.f))
#[1] 11.23 34.32 21.10
ifelse(nchar(data.f) < 6, as.numeric(data.f),
as.numeric(substr(gsub(',', '.', data.f), 1, 5)))
#[1] 11.23 34.32 21.10