【发布时间】:2019-05-08 15:13:55
【问题描述】:
我有一个非常愚蠢的问题,让我浪费了几个小时,因此我想把它贴在这里。
我的数据看起来像这样
df<- data.frame("Reporter" = c("USA", "USA", "USA", "USA",
"Africa","Africa", "Africa","Africa"),
"Partner" = c("Africa", "Africa", "EU", "EU",
"USA", "USA", "EU", "EU"),
"Year" = c(1970, 1980, 1970, 1980, 1970, 1980,
1970, 1980),
"Flow" = c("001", "00", "1", "112", "0", "2", "23", "TOT"),
"Val" = runif(8, min=0, max=100), stringsAsFactors
= FALSE)
Flow 是一个包含字符和数字的字符变量。这些是变量“Val”的标识符
class(df$Flow)
我想删除“Flow”中包含字母的行,而保留其余行。
df <- df %>% filter(Flow != "TOT")
这种方法按我的预期工作。 一旦我从流中删除字母并将我的数据保存为 csv,问题就会出现。
write.csv(df, "df.csv")
一旦我重新上传我的数据,这已经彻底改变了。由于数据已存储为数字,因此数字前面的所有 0 都已丢失
df2<- import("df.csv")
我也试过write.csv2(df, "df.csv"),但结果没有改变。
如果我改为保存在 dta 中,数据一旦重新上传就可以工作,但我想保存在 csv 中
有谁知道我做错了什么?
【问题讨论】:
-
这里使用
import()的原因是什么?我看到使用read.csv()的行为相同,据我所知,最简单的解决方案是在read.csv()之类的范围内定义colClasses,以便将此列作为字符导入。这里重要的是,您在保存数据时并没有做错任何事情,而是在您再次读取数据时出现问题。 -
R write dataframe column to csv having leading zeroes 的可能副本,尽管@Alessandro 问题的答案在这里效率更高。