2015-09-04 60 views
0

想法是通过rbind创建并更新目录数据框。这包括顺序读取和写入文件。对于某些数据帧,某些字符串列不包含任何值(空白字符串“”)会出现问题。不知何故,R将这些列视为NULL值,并显然将其删除。绑定这些数据帧会产生NAs,而不是所需的“”。R:带有空char字符串的数据框列在读取时变为NA

df <- data.frame(a = 1:5, b = "", stringsAsFactors = F) 
write.csv(df, "df.csv", row.names = F) 
df <- read.csv("df.csv", stringsAsFactors = F) 
df <- rbind(df, data.frame(a = 1:5, b = "a", stringsAsFactors = F)) 
write.csv(df, "df.csv", row.names = F) 
df <- read.csv("df.csv", stringsAsFactors = F) 

> df 
    a b 
1 1 <NA> 
2 2 <NA> 
3 3 <NA> 
4 4 <NA> 
5 5 <NA> 
6 1 a 
7 2 a 
8 3 a 
9 4 a 
10 5 a 

显然,所需的输出包含“”而不是NA。

+2

我不知道如何解决它,但我认为“”在csv被视为一个空白字段。从'read.csv'的帮助:空白字段也被认为是逻辑,整数,数字和复杂字段中的缺失值。因此,阅读'''''为'NA'似乎对我有预期的行为。 – Heroka

+1

您可以添加quote =“”read.csv哪些帮助,只是它将列名从a更改为Xa –

+0

它并没有帮助,因为它将“”更改为“\”\“” –

回答

2

read.csv导入数据时,你应该使用参数colClasses因为,在这里,R没有看到一个字符变量为b,因为只有“”值,并以r解释“”为NA

read.csv("df.csv", stringsAsFactors = F, colClasses=c("numeric", "character")) 
# a b 
# 1 1 
# 2 2 
# 3 3 
# 4 4 
# 5 5 
+0

这确实解决了问题,谢谢。 。并在旁注 - 不是如果这些帧每周频率。 –

+0

@ A.Val。的确,我错过了在同一场会议中你不会增长你的DF的部分...... ;-) – Cath

相关问题