我尝试使用dplyr
来整理数据集。我想要更改的列有一个字符串,它实际上是一个双字母,但是用逗号代替小数点。到目前为止我得到了这个:
presupuesto_2016 <- read_csv( "http://datos.gob.ar/dataset/89f1a2dd-ad79-4211-87b4-44661d81ac0d/resource/84e23782-7d52-4724-a4ba-2f9621fa5f4e/download/presupuesto-2016.csv")
names(presupuesto_2016) <- str_replace(names(presupuesto_2016), "\uFEFF", "")
presupuesto_2016 %>%
mutate_at(starts_with("monto_"),
str_replace, pattern = ",", replacement = "\\.") %>%
mutate_at(starts_with("monto_"), funs(as.numeric))
但是这设法将每一列都改为数字。我在这里做错了什么?
答案 0 :(得分:21)
如果您想使用mutate_at
和列选择辅助函数,必须将它们包含在vars
函数中才能正常工作,请查看?mutate_at
:
presupuesto_2016 %>%
mutate_at(vars(starts_with("monto_")),
# ^^^
str_replace, pattern = ",", replacement = "\\.") %>%
mutate_at(vars(starts_with("monto_")), funs(as.numeric))
# ^^^
答案 1 :(得分:6)
为什么不这样做:
URL <- "http://datos.gob.ar/dataset/89f1a2dd-ad79-4211-87b4-44661d81ac0d/resource/84e23782-7d52-4724-a4ba-2f9621fa5f4e/download/presupuesto-2016.csv"
presupuesto_2016 <- read_csv(URL, locale=locale(decimal_mark=","))
另外,我建议你这样做:
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)
presupuesto_2016 <- read_csv(fil, locale=locale(decimal_mark=","))
节省您和该网站的带宽,加快未来的处理速度,并确保在网站离线或您离线时再现。