我有一个数据框如下
date volume
1-1-90 1.1M
2-1-90 200
3-1-90 0.5M
4-1-90 100
5-1-90 1M
M的值表示百万。我想检测其中带有字母M或m的值,并将这些值转换为数值等效项
date volume
1-1-90 1100000
2-1-90 200
3-1-90 500000
4-1-90 100
5-1-90 10000000
在R中有一种很不错的方法吗?
我使用了ifelse条件,如下所示
(df)[, Volumes := ifelse(volume %in% c("m", "M"),volume * 1000000,0)]
但这似乎不起作用。我肯定忽略了那一定是微不足道的。
在我看来,您data.table
那里有一个对象(或者您可能错误地data.table
在data.frame
?上使用了语法)
无论如何,如果df
是一个data.table
对象,我会去
df[grepl("m", volume, ignore.case = T),
volume2 := as.numeric(gsub("m", "", volume, ignore.case = T)) * 1e6]
df[is.na(volume2), volume2 := as.numeric(as.character(volume))][, volume := NULL]
df
# date volume2
# 1: 1-1-90 1100000
# 2: 2-1-90 200
# 3: 3-1-90 500000
# 4: 4-1-90 100
# 5: 5-1-90 1000000
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句