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族向变量中的每个值应用函数的示例?我的代码有什么问题?@NikitaSnegirev
ifelse
已矢量化。所以这里不需要循环
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