在R中读取CSV文件时遇到问题

时间:2015-03-17 00:27:20

标签: r csv

我是R的新手 我有一个24MB的CSV文件。在我的MacBook Air上使用OS Yoswmite,4GB RAM将其读入RStudio。 R版本3.1.1(2014-07-10)。查看View(df)的内容是可以的。试图应用过滤器。不要受到任何打击。试图从字符转换为数字。 R在完成铸造的列中用NA替换所有字符!这里发生了什么?似乎R无法读取细胞的内容。编码有什么关系吗? 这就是我所做的事情: 首先是摘要:

R代码:

eiendommer <- read.csv("eiendommer.csv",  sep = ";", quote = "",  encoding="UTF-8", stringsAsFactors = FALSE)
View(eiendommer)# I can view the content of the csv file
filtereiendommer <- filter(eiendommer, kommune == "0101")# no match
filtereiendom <- eiendommer [eiendommer$kommune == "0101",]#no match
utvalg <- eiendommer[160567:161934,]#manual selection of rows do work             utvalgsortert <- arrange(utvalg, desc(jordbruksareal), desc(skogareal))# works
View(utvalgsortert)
##Try to transform columns from character to number. 
transformedEiendom <- transform(sortertEiendom, jordbruksareal = as.numeric(jordbruksareal),
                       skogareal = as.numeric(skogareal) )
#This result in NA where it earlier was characters with lengt 1-3:"646", "18", "2" 

要点:

kommune           X.gardsnr.         X.bruksnr.         X.festenr.         bruksnavn         jordbruksareal    
 Length:207554      Length:207554      Length:207554      Length:207554           Length:207554      Length:207554     
 Class :character   Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 X.annetareal.       skogareal         X.fulldyrket.        X.overflatedyrket. X.innmarksbeite.  
 Length:207554      Length:207554      Length:207554      Length:207554      Length:207554     
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  

目:

head(eiendommer)
  kommune X.gardsnr. X.bruksnr. X.festenr.    bruksnavn jordbruksareal X.annetareal. skogareal X.fulldyrket.
1  "0101"        "1"        "1"        "0" "PRESTEGÅRD"            "0"           "5"       "0"           "0"
2  "0101"        "1"        "6"        "0"         "MO"            "8"           "4"       "7"           "8"
3  "0101"        "1"        "9"        "0"  "BERG GÅRD"          "415"          "16"      "39"         "415"
4  "0101"        "2"        "1"        "0"     "BOBERG"          "467"          "22"     "276"         "463"
5  "0101"        "4"        "1"        "0"  "LUNDESTAD"          "877"          "62"     "793"         "837"
6  "0101"        "4"        "5"        "0"     "LEIREN"           "74"          "14"     "165"          "74"    

3 个答案:

答案 0 :(得分:2)

您似乎已经指定了quote = "",实际上您应该拥有quote='"',或者只有默认值可以使用d <- data.frame(x='a',y='"a"',stringsAsFactors=FALSE) d # x y # 1 a "a"

参见下面的示例

print.data.frame

对于常规字符向量,"不会将其括在{{1}}

答案 1 :(得分:0)

挪威Kommune Nummer将面临的一个挑战是那些以Halden“0101”开头的0。

#Prepare Data
    kommune = rep("0101", 6) 
    jordbruksareal<- c("5","4","16","22","62","14")
    skogareal <- c("0","8","415","463","837", "74")
    eiendommer <- cbind(kommune, jordbruksareal, skogareal)
    eiendommer <- as.data.frame(cbind(kommune, jordbruksareal, skogareal), stringsAsFactors=FALSE)
    #Transform into numeric
    str(eiendommer) #All is Character
    eiendommer$skogareal<-as.numeric(eiendommer$skogareal)
    eiendommer$jordbruksareal<-as.numeric(eiendommer$jordbruksareal)
    eiendommer$kommune<-as.numeric(eiendommer$kommune)
    str(eiendommer) #All is numeric, but losing first zer0
#Make a filter
    require(dplyr)
    filterA <- filter(eiendommer, eiendommer$jordbruksareal == "4")
    filter <- subset(eiendommer, eiendommer$kommune == 101)
#Treat Kommune Numbers
    eiendommer$kommune <- formatC(eiendommer$kommune, digits = 0, format = "f", width = 4, flag = 0)
    eiendommer$kommune <- sprintf("%04d",eiendommer$kommune)
    str(eiendommer)
    filter2 <- subset(eiendommer, eiendommer$kommune == "0101")

希望这有点帮助,Ha det bra!

答案 2 :(得分:0)

这导致我在文件中出现问题:

;"BLOMSTERHAGEN\"";

将其更改为:

;"BLOMSTERHAGEN";

修正了问题。不,我可以像这样读取.sv:

eiendommer <- read.csv("eiendommer.csv",  sep = ";", encoding="UTF-8", stringsAsFactors = FALSE)

由于