代码之家  ›  专栏  ›  技术社区  ›  Richard Herron

在csv文件(或SQLite数据库)的条目列中追加后缀

csv r
  •  2
  • Richard Herron  · 技术社区  · 14 年前

    如果文件不是那么大,就很容易使用 read.csv 导入到 data data$symbol <- paste(data$symbol, "1C", sep="") . 但现在我得到了 can't allocate vector of size x 警告。

    是手动解决方案,比如 scan() ,我唯一的选择?(我有点害怕破坏我的数据)谢谢!

    4 回复  |  直到 14 年前
        1
  •  7
  •   Community CDub    8 年前

    使用 scan 如果你已经可以把你的数据输入到R中,那就没用了。

    确保 data 只有需要合并并运行的列 gc() 在你尝试之前 paste 命令( gc 如果你接近你的记忆极限。

    如果失败了,看看 this thread .



    如果你碰巧使用的是*nix,或者你在windows上安装了Rtools,你可以使用 gawk . 如果你的数据在 foo.csv bar.csv ,第二列加上“C1”。

    compy: /home/josh
    > cat foo.csv 
    1,one,2,two
    3,three,4,four
    5,five,6,six
    
    compy: /home/josh
    > gawk -F "," '{OFS=","; $2=($2 "1C"); print}' < foo.csv > bar.csv
    
    compy: /home/josh
    > cat bar.csv 
    1,one1C,2,two
    3,three1C,4,four
    5,five1C,6,six
    

    这可能比R快,并且消耗的内存可以忽略不计。

        2
  •  12
  •   JD Long    14 年前

    这有点难看,但是你可以一行一行地读取文件,然后把它一行一行地放到另一个文件中。这样你就永远不会把整件事都记下来了。这与Joshua的awk方法没有什么不同,而是使用R(而且速度要慢得多)。下面的例子是我拼凑出来的一个从csv中删除美元符号和百分比符号的例子。你可以改变中间的逻辑来完成你想要的逻辑。

    con  <- file(inputFile, open = "r")
    con2 <- file(temporaryFile, open = "w")
    
    while (length(oneLine <- readLines(con, n = 1, warn = FALSE)) > 0) {
        oneLine <- gsub("%", "", oneLine)     #strip out the percent signs
        oneLine <- gsub("\\$", "", oneLine)   #strip out the dollar signs
        cat(oneLine, file = con2, sep = "\n") #spit the line back out
      } 
    
    close(con)
    close(con2)
    
        3
  •  2
  •   IRTFM    14 年前

    只读取一列,我假设这可能是以后将操作合并到内存中的前导唯一标识符:

    twocol <- read.table(file="what.csv", colClasses=("numeric", "character", rep("NULL", <number-of-remaining-columns>) , sep="," )
    twocol$V2 <- paste(twocol$V2, "1C", sep="")
    merge(twocol, otherdf, by.x="V1" , ....)
    
        4
  •  0
  •   Chris Koknat    9 年前

    在第二列中添加1C:

    perl -F, -lane '$F[1] .= "1C"; print join ",", @F' file.csv

    使用以下命令行选项:

    • -n 循环输入文件的每一行
    • -l
    • -a 自动拆分模式将输入行拆分为 @F
    • -e 执行perl代码
    • -F 自动拆分修饰符,在本例中拆分为 ,

    @F型 是每行中的单词数组,以 $F[0]
    .= 是“附加到”运算符