0

我是 R 的新手,并且已经被这个问题困扰了很长时间。考虑到它看起来多么简单,我很困惑这么长时间被困住了。所以我们开始:

基本上,我有一个向量,我们称它为“测试”,其中包含一系列数字。

[1] "9 29 7 22 5 5 5 8 14 5 5 8 7 9 15 15 7 5 5 6 6 5 9 5 6 7 6 7 11 5 6 10 5 5 7 8 23 11 15 24 5 5 11 5 7 19 6 6 30 6 7 7 24 9 8 15 5 5 29 10 17 6 6 11 26 9 19 32 7 8 14 5 8 8 18 6 5 9 6 11 5 7 6 8 5 6 54 6 7 8 22 7 5 8 6 31 6 5 8 26 12 9 7 5 11 6 27 9 6 15 17 5 8 5 6 5 5 5 9 6 5 7 7 9 10 11 33 19 13 6 18 6 9 7 5 6 8 5 5 5 6 5 6 5 18 6 6 7 8 9 5 8 5 8 16 5 8 6 8 7 12 8 13 11 5 17 15 5 12 7 7 11 6 6 5 10 9 5 5 14 7 12 6 5 5 7 5 30 7 5 8 5 9 10 21 6 14 9 7 14 26 23 7 24 7 13 7 5 5 9 12 11 6 5 5 6 5 6 7 76 5 10 6 16 5 12 11 15 6 28 7 14 8 5 6 5 8 5 12 6 5 10 5 14 7 8 6 5 5 8 19 15 10 7 5 14 5 15 7 8 6 6 5 35 5 6 5 11 5 13 5 7 12 11 5 6 10 5 15 6 12 9 11 5 7 9 8 17 8 8 11 6 7 5 15 10 8 8 9 26,6 25 6 13 11 6 15 5 7 7 38 9 5 10 10 11 6 8 6 13 10 7 5 18 9 12 6 16 13 8 8 6 5 5 8 8 8 5 6 5 5 5 5 7 13 6 12 6 6 10 8 8 18 6 5 12 5 8 17 5 18 5 5 17 8 7 6 7 16 10 7 6 10 6 6 10 17 5 10 7 10 6 11 9 5 25 12 13 6 11 5"

R 将其解释为字符串:

str(test)
chr "9 29 7 22 5 5 5 8 14 5 5 8 7 9 15 15 7 5 5 6 6 5 9 5 6 7 6 7 11 5 6 10 5 5 7 8 23 11 15 24 5 5 11 5 7 19 6 6 30..."

我想做的并不比这更复杂:我想创建一个直方图,绘制上面字符串中每个数字的频率(实际上,这是网络的度数分布)。

问题是我正在处理一个字符串。

> hist(test)
Error in hist.default(test) : 'x' must be numeric

但是,如果我尝试将“测试”转换为数字,它也会失败。

> as.numeric(test)
[1] NA
Warning message:
NAs introduced by coercion 

我确信这里的解决方案非常简单,但是我已经尝试了很长时间没有成功的解决方案。

预先感谢您的帮助!

4

3 回答 3

3

显示的str(test)是单个字符串,因此我们可以提取元素,scan然后使用hist

hist(scan(text = test, what = numeric(), quiet = TRUE))

在查看 OP 的数据时,有空格和,. 因此,我们将其更改为单个分隔符,然后使用scan

hist(scan(text = gsub(",", " ", test), what = numeric(), quiet = TRUE))

在此处输入图像描述

于 2019-07-17T13:33:07.177 回答
1

我建议使用 stringr 包将字符串拆分为列表,然后取消列出并存储为数字向量:

a <- "9 29 7 22 5 5 5 8 14 5 5 8 7 9 15 15 7 5 5 6 6 5 9 5 6 7 6 7 11 5 6 10 5 5 7 8 23 11 15 24 5 5 11 5 7 19 6 6 30 6 7 7 24 9 8 15 5 5 29 10 17 6 6 11 26 9 19 32 7 8 14 5 8 8 18 6 5 9 6 11 5 7 6 8 5 6 54 6 7 8 22 7 5 8 6 31 6 5 8 26 12 9 7 5 11 6 27 9 6 15 17 5 8 5 6 5 5 5 9 6 5 7 7 9 10 11 33 19 13 6 18 6 9 7 5 6 8 5 5 5 6 5 6 5 18 6 6 7 8 9 5 8 5 8 16 5 8 6 8 7 12 8 13 11 5 17 15 5 12 7 7 11 6 6 5 10 9 5 5 14 7 12 6 5 5 7 5 30 7 5 8 5 9 10 21 6 14 9 7 14 26 23 7 24 7 13 7 5 5 9 12 11 6 5 5 6 5 6 7 76 5 10 6 16 5 12 11 15 6 28 7 14 8 5 6 5 8 5 12 6 5 10 5 14 7 8 6 5 5 8 19 15 10 7 5 14 5 15 7 8 6 6 5 35 5 6 5 11 5 13 5 7 12 11 5 6 10 5 15 6 12 9 11 5 7 9 8 17 8 8 11 6 7 5 15 10 8 8 9 26,6 25 6 13 11 6 15 5 7 7 38 9 5 10 10 11 6 8 6 13 10 7 5 18 9 12 6 16 13 8 8 6 5 5 8 8 8 5 6 5 5 5 5 7 13 6 12 6 6 10 8 8 18 6 5 12 5 8 17 5 18 5 5 17 8 7 6 7 16 10 7 6 10 6 6 10 17 5 10 7 10 6 11 9 5 25 12 13 6 11 5"

library(stringr)

b <- as.numeric( unlist ( str_split (a, " ")))

hist(b)

我得到的直方图:

在此处输入图像描述

于 2019-07-17T13:39:23.917 回答
0

看起来您的测试“向量”只是一个长字符串。一个数值向量如下:

nums <- c(1,2,3,4,5,6)

您还可以创建一个字符向量并对其进行转换,就像您尝试过的那样:

chars <-  c("1","2","3","4","5","6")
nums <- as.numeric(chars)

你的价值观更像是:

char <- "1 2 3 4 5 6"

不能使用 as.numeric() 将其转换为数值,因为它是一个长字符串,而不是数字或字符的向量

于 2019-07-17T13:42:19.503 回答