R 读取一个 URL table 带有自由文本列
R read an URL table with a free text column
我想阅读 URL 中的文本 table。 table 确实有 3 列;第二列是一个字符列,里面有几个单词,单词周围有引号。 public 无法访问数据,这就是为什么我不能在这里给出 link,但我举了一个例子,说明当你打开 http link:[=13 时数据的样子=]
col1 "column second"
col3
1 "a city name" 2323
20 second 4343
30 "third row" 43434
'col1','"column second"','col3' 是列名,这就是 header 在真实 URL 中的样子。我尝试了一些读取函数,例如 read_delim()、readline()、read.table 和 fread,但其中 none 可以正确读取数据。当我下载或 copy/paste 文件时,它没有任何问题,但当我想直接从 URL 读取时失败。问题出在第二列中的“”。例如,如果我设置 sep=" ",则数据的第一行有 5 列,第二行有 3 列,第三行有 4 列。
感谢您的帮助。
使用 scan
将数据读入字符向量 s
并将除前 3 个元素以外的所有元素重新转化为矩阵,然后使用这 3 个元素作为数据框 DF
列名。最后转换DF
的每一列的类型。我们已经使用 scan
读取末尾注释中显示的 Lines
,但它也可以使用 scan
的 file=
参数从文件或连接读取。没有使用包。
s <- scan(text = Lines, what = "", quiet = TRUE)
DF <- setNames(as.data.frame(matrix(tail(s, -3),, 3, byrow = TRUE)), s[1:3])
DF[] <- lapply(DF, type.convert)
给予:
> DF
col1 column second col3
1 1 a city name 2323
2 20 second 4343
3 30 third row 43434
备注
以可复制的形式输入:
Lines <- 'col1 "column second"
col3
1 "a city name" 2323
20 second 4343
30 "third row" 43434'
格洛腾迪克的回答很完美。对于那些可能有兴趣阅读 url 表格的人,我刚刚找到了另一个解决方案 https://www.r-bloggers.com/getting-data-from-an-online-source/。
library(RCurl)
# The url link provided in the comment by Grothendieck
url <- 'https://raw.githubusercontent.com/CSSEGISandData/COVID-
19/master/archived_data/archived_daily_case_updates/02-12-2020_1020.csv'
myfile <- getURL(url, ssl.verifyhost=FALSE, ssl.verifypeer=FALSE)
mydat <- read.csv(textConnection(myfile), header=T)
head(mydat)
我的 url 在问题 post 中的问题是数据不是原始格式;就像 onedrive 或 google 驱动器中的文件。它可以放在另一个问题中;或者欢迎在此处分享您的答案或 link,以阅读此类数据。
我想阅读 URL 中的文本 table。 table 确实有 3 列;第二列是一个字符列,里面有几个单词,单词周围有引号。 public 无法访问数据,这就是为什么我不能在这里给出 link,但我举了一个例子,说明当你打开 http link:[=13 时数据的样子=]
col1 "column second"
col3
1 "a city name" 2323
20 second 4343
30 "third row" 43434
'col1','"column second"','col3' 是列名,这就是 header 在真实 URL 中的样子。我尝试了一些读取函数,例如 read_delim()、readline()、read.table 和 fread,但其中 none 可以正确读取数据。当我下载或 copy/paste 文件时,它没有任何问题,但当我想直接从 URL 读取时失败。问题出在第二列中的“”。例如,如果我设置 sep=" ",则数据的第一行有 5 列,第二行有 3 列,第三行有 4 列。
感谢您的帮助。
使用 scan
将数据读入字符向量 s
并将除前 3 个元素以外的所有元素重新转化为矩阵,然后使用这 3 个元素作为数据框 DF
列名。最后转换DF
的每一列的类型。我们已经使用 scan
读取末尾注释中显示的 Lines
,但它也可以使用 scan
的 file=
参数从文件或连接读取。没有使用包。
s <- scan(text = Lines, what = "", quiet = TRUE)
DF <- setNames(as.data.frame(matrix(tail(s, -3),, 3, byrow = TRUE)), s[1:3])
DF[] <- lapply(DF, type.convert)
给予:
> DF
col1 column second col3
1 1 a city name 2323
2 20 second 4343
3 30 third row 43434
备注
以可复制的形式输入:
Lines <- 'col1 "column second"
col3
1 "a city name" 2323
20 second 4343
30 "third row" 43434'
格洛腾迪克的回答很完美。对于那些可能有兴趣阅读 url 表格的人,我刚刚找到了另一个解决方案 https://www.r-bloggers.com/getting-data-from-an-online-source/。
library(RCurl)
# The url link provided in the comment by Grothendieck
url <- 'https://raw.githubusercontent.com/CSSEGISandData/COVID-
19/master/archived_data/archived_daily_case_updates/02-12-2020_1020.csv'
myfile <- getURL(url, ssl.verifyhost=FALSE, ssl.verifypeer=FALSE)
mydat <- read.csv(textConnection(myfile), header=T)
head(mydat)
我的 url 在问题 post 中的问题是数据不是原始格式;就像 onedrive 或 google 驱动器中的文件。它可以放在另一个问题中;或者欢迎在此处分享您的答案或 link,以阅读此类数据。