从文本文件中读取元组并绘制到图形

时间:2018-11-13 13:39:48

标签: r text-files factors

我有一个文本文件,其中包含整数数据元组,我想在一个简单的图形中绘制该文件。 文本文件(“ test.txt”)如下所示。所有元组都由制表符分隔。

文本文件(test.txt)

(1,2)        (1,3)         (2,8)       (3,12)       (5,82)       (...)

R代码

m = read.table('test.txt', header = FALSE, sep='\t')
plot(log(m[,1]), log(m[,2]))

结果我得到

Error in Math.factor(m[,1]): 'log' not meaningful for factors

我能理解的是,我的数据元组不是作为数字值而是作为因子读取的。因此,“ log”运算符不能对这些(因数)值进行运算。 因此,我的想法一直是将因子转换为数值,但是转换数据失败。此外,我不确定这是否是解决我的问题的方法。

我想拥有一个以(x,y)值为轴的二维图形。

也许有人知道如何处理它。

---编辑---

library(readtext)
library(ggplot2)


DATA_DIR <- system.file("extdata/", package = "readtext")

mytab = readtext(paste0(DATA_DIR, "/hlra/*"))
# readtext object consisting of 1 document and 0 docvars.
# # data.frame [1 x 2]
# doc_id                text               
# <chr>                 <chr>              
#   1 sample_tuple_file.txt "\"(1,2), (1,\"..."
mytuple = strsplit(mytab$text, ', ')
mytuple = mytuple[[1]]

substring(mytuple[1], 2, 2) # get x value
substring(mytuple[1], 4, 4) # get y value 

x = c()
y = c()

for (i in 1:length(mytuple)){
   my_x = substring(mytuple[i], 2, 2)
   my_y = substring(mytuple[i], 4, 4)
   x <- c(x, my_x)
   y <- c(y, my_y)
   rm(my_x)
   rm(my_y)
}

mydata = data.frame(x = x, y = y)

ggplot(data = mydata, aes(x = x, y = y)) + 
geom_point()

因此,我已经测试了上面的代码。但这并不适用于所有数据。结果图仅是第一个值。我已经重新整理了我的文本文件,所以每个元组都以逗号和制表符结尾。

plot from code above

我是R的新手,所以我确定我的代码中遗漏了一些明显的错误。顺便说一下,我必须更改一些代码才能使其在R-Studio中运行(添加了缺少的库(ggplot2和readtext)并更改了文件目录。

1 个答案:

答案 0 :(得分:1)

假设您有这种文本文件:

(1,2)        (1,3)         (2,8)       (3,12)       (5,82)       (...)

我建议使用read_text。计算向量和字符串,以准备用于绘制的格式准备数据。

#if packages aren't yet included in R import them by using R-console
#Command: install.packages("package-name")
#import library "readtext" 
library(readtext)
#install library "ggplot2"
library(ggplot2)

#get directory from "readtext"-package which is in my case...
#C:\Users\your_name\Documents\R\win-library\3.5\readtext\extdata\your_folder\
DATA_DIR <- system.file("extdata/", package = "readtext")

#the textfile you want to plot should be in folder "your_folder"
mytab = readtext(paste0(DATA_DIR, "your_folder/*")
# readtext object consisting of 1 document and 0 docvars.
# # data.frame [1 x 2]
# doc_id                text               
# <chr>                 <chr>              
#   1 sample_tuple_file.txt "\"(1,2), (1,\"..."

mytuple = strsplit(mytab$text, '\t')
mytuple = mytuple[[1]]

substring(mytuple[1], 2, 2) # get x value
substring(mytuple[1], 4, 4) # get y value 

x = c()
y = c()

for (i in 1:length(mytuple)){
  my_x = substring(mytuple[i], 2, 2)
  my_y = substring(mytuple[i], 4, 4)
  x <- c(x, my_x)
  y <- c(y, my_y)
  rm(my_x)
  rm(my_y)
}

mydata = data.frame(x = x, y = y)

ggplot(data = mydata, aes(x = x, y = y)) + 
  geom_point()

enter image description here