【问题标题】:Go through dataframe row by row and write to file逐行浏览数据框并写入文件
【发布时间】:2015-10-13 12:35:12
【问题描述】:

我正在学习 R 并且对 Python 有一点了解。 我觉得 R 和 Python 在某些方面是相似的,而在其他方面则非常不同。

尤其是在从某个文件迭代或读取数据时,我会卡住。

我有一个data.frame

temp <- 
A    B    C
1    2    3
4    5    6
7    8    8

我只是想逐行读取它,然后将其写入一个新文件。

#New File
[1,2,"3"],
[4,5,"6"],
[7,8,"9"],

我试过了

A <- temp[1]
B <- temp[2]
C <- temp[3]

print(paste("[", A, B, as.character(C),  "]", sep = ","))

但是,paste 没有结合 A, BC 正确。它给了我这个:

[1,4,"7"],
[2,5,"8"],
[3,6,"9"],

我尝试了其他几种方法,例如

`test <- rbind(temp)` 

for(i in temp) {
        print(temp[,])
        print(paste("[", temp[,],  "]", sep = ","))
}

最后它总是归结为同一件事:当我尝试打印/粘贴它而不是逐行时,它逐列排列它。

我还摆弄了array()。感觉像是执行此操作的正确函数,但将list 作为FUN 参数传递似乎不正确...

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一种解决方案,将您的数据写入myfile.txt

    cat(apply(temp, 1, function(x)paste0('[', x[1], ' ',  x[2], ' "', x[3], '"]', '\n')), sep='', file='myile.txt')
    

    【讨论】:

    • 感谢您的帮助。 function(x) 是什么?
    • 看看?applyfunction(x) 是一个函数,它将数据帧的一行作为输入向量,打印括号中的值并引用第三个元素。
    • 是的,我明白这一点。但是function(x) 只是一个假人?!为什么不使用paste() 函数而不是function(x)
    • 因为像apply(temp, 1, paste0) 这样的东西不会让你区分paste0 采用的向量中的不同元素。当将 paste0 包装在自定义函数中时,这成为可能。
    • 啊,现在我明白了。谢谢!
    【解决方案2】:

    (本机)python 和 R 在数组/向量/矩阵方面的工作方式非常不同。 Python 必须被隐式指示迭代每个元素,而 R 本身会这样做。

    如果您想要的输出是[1,2,"3"],\n[4,5,"6"],\n[7,8,"9"],\n,您可以分两步完成(虽然另一个答案有更直接的解决方案,我将其包括在内以用于学习目的):

    #1 concatenate each row:
    rows <- apply(temp, 1, function(x) paste0('[', x[1], ' ',  x[2], ' "', x[3], '"]'))
    #2 write rows to file
    writeLines(rows, con="myile.txt')
    

    【讨论】:

    • 是的,它的工作方式非常不同,我刚开始学习 R。但是,我搞砸了 apply() 函数,但我不知道该填写哪个函数......你用过(作为之前的作者)function(x)。这是什么?
    • function(x) 是一个 lambda 函数或匿名函数,仅在执行该行时存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多