有没有一种方法可以使用read.csv从字符串值而不是r中的文件读取?

StackOverflow https://stackoverflow.com/questions/3936285

  •  30-09-2019
  •  | 
  •  

我正在编写R代码与Java应用程序对话的R软件包。 Java应用程序输出了CSV格式的字符串,我希望R代码能够直接读取字符串并将其转换为data.frame。

有帮助吗?

解决方案

编辑一个7岁的答案: 到现在,这是 很多 更简单,感谢 text= 已添加到的参数 read.csv() 和一样:

R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
  flim flam
1  1.2 2.20
2 77.1 3.14
R> 

是的,看看帮助 textConnection() - 这 很强大 R中的概念本质上是所有读者(例如 read.table() 及其变体)访问这些 联系 可能是文件,或远程URL或来自另一个应用程序的管道,或者……在您的情况下进行的一些文本。

在此处所谓的文档中也使用了同样的技巧:

> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
  flim flam
1  1.2 2.20
2 77.1 3.14
> 

请注意,这是一个 简单的 建造某些东西的方法,但也是 昂贵 由于所有数据的重复解析。还有其他方法可以从Java到R,但这应该使您快速前进。效率接下来...

其他提示

请注意,在现在流动版本的R中,您不再需要 textConnection(), ,可以简单地做到这一点:

> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
       State Abbreviation
1    Alabama           AL
2     Alaska           AK
3    Arizona           AZ
4   Arkansas           AR
5 California           CA

是的。例如:

string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
#    V1   V2    V3
#1 this will    be
#2    a data frame

假设您有一个名为tommy.csv的文件(是的,我知道...)

col1 col2 n 1 1 n 2 2 n 3 3 3

每行都用逃生字符“ n”分开。

可以在 allowEscapes 参数 read.table.

> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)

  col1 col2
1 col1 col2
2    1    1
3    2    2
4    3    3

它不是完美的(修改列名...),但这是一个开始。

此功能将Dirk的答案包裹成方便的形式。对于回答问题的问题,这是很棒的,问答器刚刚在屏幕上丢弃了数据。

text_to_table <- function(text, ...)
{
   dfr <- read.table(tc <- textConnection(text), ...)
   close(tc)
   dfr
}

要使用它,请首先复制屏幕数据并粘贴到文本编辑器中。

foo bar baz
1 2 a
3 4 b

现在用它包裹 text_to_table, ,报价和任何其他论点 read.table.

text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top