将两个数组转换为R中的一个数据帧
问题描述:
我有两个数组来自postgreSQL数据库,如下所示。将两个数组转换为R中的一个数据帧
iarray
{9.467182035,9.252423958,9.179368178,9.142931845,9.118895803,9.098669713,9.093398102,9.092035392,9.091328028,9.090594437,9.090000456,9.089253543......keeps going on}
varray
{-1.025945126,-0.791203874,-0.506481774,-0.255416444,-0.028424464,0.188855034,0.390787963,0.579327969,0.761521769 ...keeps going on}
两个数组都有相同数量的条目。我想将它们转换为数据帧,因此我可以绘制出一个比我更好的图形 我该如何继续?
我试图n<-gsub("^\\{+(.+)\\}+$", '\\1', iarray)
以除去{}和
n2 <- strsplit(n, ",")
以除去逗号。
答
假设你正在iarray &变长数组作为字符串:
iarray = "{9.467182035,9.252423958,9.179368178,9.142931845}"
varray = "{-1.025945126,-0.791203874,-0.506481774,-0.255416444}"
n<-gsub("^\\{+(.+)\\}+$", '\\1', iarray)
n1 <- strsplit(n,",")
n1 <- unlist(n1)
df <- as.data.frame(n1)
n<-gsub("^\\{+(.+)\\}+$", '\\1', varray)
n2 <- strsplit(n,",")
n2 <- unlist(n2)
df <- cbind(df,n2)
+0
@Nisal这是正确的方法。这里的诀窍是''取消'strsplit()'的输出以获得实际的字符向量。 –
答
这似乎是为数不多的时刻之一正确使用eval(parse())
:
df<-list(iarray,varray)
df<-data.frame(lapply(df,
function(x) eval(parse(text=sub("\\}$",")",sub("^\\{","c(",x))))
))
names(df)<-c("iarray","varray")
我们只是{
与(
更换,添加c
开始,iarray
和varray
成为命令行来创建向量,我们parse
和eval
。
这看起来有点像json吗? – bramtayl