导入不带千位定界符的 csv,并在不丢失小数分隔符的情况下从因子转换为数字
Import csv without thousand delimiter and convert from factor to numeric without loss of decimal separator
我有一个包含 5 列的列表 data.list,如下所示:
Code Price_old MB Price_new Product
CZ 898.00 20.00 1.001.00 Type 1
CZ 890.00 300.00 1.016.33 Type 2
CZ 890.00 1.000.00 1.016.63 Type 2
CZ 899.00 200.00 1.019.33 Type 2
NO 999.00 50.00 1.025.75 Type 3
NO 999.00 600.00 1.025.75 Type 3
这是直接从 .csv 导入的。我想知道的是一种将第 2、3 和 4 列从因子转换为数字的方法(as.numeric(levels(f))[f] 不起作用!)(1 和 5 是字符)而不丢失任何信息。
使用 mutate_if(is.factor, as.numeric)
的转换最终丢失了所有小数点:1.025.75 -> 102575、50.00 -> 5000 等
转换为 sapply
indx <- sapply(data.list, is.factor)
data.list[indx] <- sapply(data.list[indx],
function(x) as.numeric(as.character(x)))
在我的完整数据集的每一列中通过强制生成大约 200 个 NA,这是我离不开的数据。
其次,我想找到一种解决方案,将所有数值转换为这种格式:“####.##”。
我搜索了很多相关的博客和帖子,但没有找到适合我的问题的解决方案。希望有人有王牌。
干杯
使用来自
的答案
基本上,您想要删除除最后一个句点以外的所有句点。
csvfile <-
"Code,Price_old,MB,Price_new,Product
CZ,898.00,20.00,1.001.00,Type 1
CZ,890.00,300.00,1.016.33,Type 2
CZ,890.00,1.000.00,1.016.63,Type 2
CZ,899.00,200.00,1.019.33,Type 2
NO,999.00,50.00,1.025.75,Type 3
NO,999.00,600.00,1.025.75,Type 3"
csvfile <- textConnection(csvfile)
df <- read.csv(csvfile, stringsAsFactors = FALSE)
df[2:4] <- lapply(df[2:4],
function(x) as.numeric(gsub("\.(?=[^.]*\.)", "", x, perl = TRUE)))
df
我有一个包含 5 列的列表 data.list,如下所示:
Code Price_old MB Price_new Product
CZ 898.00 20.00 1.001.00 Type 1
CZ 890.00 300.00 1.016.33 Type 2
CZ 890.00 1.000.00 1.016.63 Type 2
CZ 899.00 200.00 1.019.33 Type 2
NO 999.00 50.00 1.025.75 Type 3
NO 999.00 600.00 1.025.75 Type 3
这是直接从 .csv 导入的。我想知道的是一种将第 2、3 和 4 列从因子转换为数字的方法(as.numeric(levels(f))[f] 不起作用!)(1 和 5 是字符)而不丢失任何信息。
使用 mutate_if(is.factor, as.numeric)
的转换最终丢失了所有小数点:1.025.75 -> 102575、50.00 -> 5000 等
转换为 sapply
indx <- sapply(data.list, is.factor)
data.list[indx] <- sapply(data.list[indx],
function(x) as.numeric(as.character(x)))
在我的完整数据集的每一列中通过强制生成大约 200 个 NA,这是我离不开的数据。
其次,我想找到一种解决方案,将所有数值转换为这种格式:“####.##”。
我搜索了很多相关的博客和帖子,但没有找到适合我的问题的解决方案。希望有人有王牌。
干杯
使用来自
基本上,您想要删除除最后一个句点以外的所有句点。
csvfile <-
"Code,Price_old,MB,Price_new,Product
CZ,898.00,20.00,1.001.00,Type 1
CZ,890.00,300.00,1.016.33,Type 2
CZ,890.00,1.000.00,1.016.63,Type 2
CZ,899.00,200.00,1.019.33,Type 2
NO,999.00,50.00,1.025.75,Type 3
NO,999.00,600.00,1.025.75,Type 3"
csvfile <- textConnection(csvfile)
df <- read.csv(csvfile, stringsAsFactors = FALSE)
df[2:4] <- lapply(df[2:4],
function(x) as.numeric(gsub("\.(?=[^.]*\.)", "", x, perl = TRUE)))
df