将.numbers电子表格导入R

时间:2014-04-07 14:48:44

标签: r import spreadsheet

是否有任何功能可以将.numbers(Apple的电子表格程序)文件导入R?我可以使用read.xls包中的gdata导入.xlsx文件。但是使用read.xls对.numbers文件无效。

1 个答案:

答案 0 :(得分:1)

没有正式的软件包和@Roland的权利,因为您可以更好地使用File->Export->CSV来获取数据。如果您只需要一个表 - 例如:

enter image description here

您需要可以离开选择单元格并使用pbpaste

dat <- read.csv(pipe('pbpaste'), sep='\t')
dat
##       A   B
## 1     4 456
## 2     5 346
## 3     5 345
## 4    34 345
## 5     4 345
## 6    45 345
## 7    46 345
## 8  3456 345
## 9   678  34
## 10  568  34

这不是可扩展的。

或者,Numbers已经重新获得AppleScript支持并且它有一个export调用,所以理论上 - 创建一个文件夹操作或命令行脚本以获取一个或多个.numbers非常简单文件并将它们放到CSV中。这也可以是在R中编写一个瘦的“垫片”模块或函数的方法,它可以在幕后执行(ee read.numbers("myfile.numbers", table=1)然后将这个Numbers表格导出并将第一个表格导出为CSV文件然后使用read.csv来阅读它。

<强>更新

为此,这里是对来自https://stackoverflow.com/users/1982991/plang]的(@plang)[another SO post的脚本的修改,该脚本适用于最新版本的Numbers。把它变成read.numbers()函数/包并不是太困难,但是我不需要构建它,因为它需要处理太多边缘条件,这些条件表示Numbers如何从具有多个表/表的文档中保存CSV文档。

当前用于Numbers的AppleScript字典可以直接从脚本执行打开和读取表(IMO仍然需要使用pbpaste hack,因为我认为没有R&lt; - &gt; AppleScript网桥)。它可以通过Java&lt; - &gt; AppleScript桥完成,但考虑到需要直接使用Numbers文档的人口较少,这似乎有些过分。

我仍然建议将脚本(下面)转换为文件夹操作,并将需要在R中使用的Numbers文件拖到它进行批量转换。

# - input: Numbers input file
# - output: CSV output file
#
# Attik System, Philippe Lang
#
# Orig from: https://stackoverflow.com/a/10845335/1457051
#
# Creation date: 31 mai 2012
# Modification date: 07-Apr-2014 by @hrbrmstr
# -------------------------------------------------------------------------------
on run argv
    # We retreive the path of the script
    set myPath to (path to me)
    tell application "Finder" to set myFolder to folder of myPath

    # We get the command line parameters
    set input_file to item 1 of argv
    set output_file to item 2 of argv

    # We retreive the extension of the file
    set theInfo to (info for (input_file))
    set extname to name extension of (theInfo)

    # Paths
    set input_file_path to (myFolder as text) & input_file
    set output_file_path to (myFolder as text) & output_file

    log input_file_path
    log output_file_path

    if extname is equal to "numbers" then
        tell application "Numbers"
            open input_file_path
            export document 1 as CSV to output_file_path
            close every window saving no
        end tell
    end if
end run