Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何正确导入以分号分隔的文件_R_Csv_Data.table_Fread_Read.csv - Fatal编程技术网

R 如何正确导入以分号分隔的文件

R 如何正确导入以分号分隔的文件,r,csv,data.table,fread,read.csv,R,Csv,Data.table,Fread,Read.csv,我一直在尝试导入以下分号分隔文件: # word len;freq;mean;sens;npos;u;orthon;freqn;bgp WN000000 fiber "5;8.671;1;5;1;0;5;6.1;0;-1" 10000000 clad "4;6.78;2;2;1;1;8;7.84;2026;-1" 10000000 tucker "6;8.103;2;3;2;0.91829583405449;7;5.5;4547;-1" 10000000 我尝试了rea

我一直在尝试导入以下分号分隔文件:

# word  len;freq;mean;sens;npos;u;orthon;freqn;bgp  WN000000
fiber   "5;8.671;1;5;1;0;5;6.1;0;-1"    10000000
clad    "4;6.78;2;2;1;1;8;7.84;2026;-1" 10000000
tucker  "6;8.103;2;3;2;0.91829583405449;7;5.5;4547;-1"  10000000
我尝试了
read.csv
data.table::fread
,但没有成功
read.csv
识别一些标题,实际值都在第一列下:

 X..word.len freq mean sens npos  u orthon freqn bgp.WN000000
1 fiber\t5;8.671;1;5;1;0;5;6.1;0;-1\t10000000   NA   NA   NA   NA NA     NA    NA           NA
2 clad\t4;6.78;2;2;1;1;8;7.84;2026;-1\t10000000   NA   NA   NA   NA NA     NA    NA           NA
3 tucker\t6;8.103;2;3;2;0.91829583405449;7;5.5;4547;-1\t10000000   NA   NA   NA   NA NA     NA    NA           NA
fread
识别第一列,但将所有其他列合并为一列

  X..word    len.freq.mean.sens.npos.u.orthon.freqn.bgp WN000000
1   fiber                    5;8.671;1;5;1;0;5;6.1;0;-1 10000000
2    clad                 4;6.78;2;2;1;1;8;7.84;2026;-1 10000000
3  tucker  6;8.103;2;3;2;0.91829583405449;7;5.5;4547;-1 10000000

有人能帮忙吗?

据我所知,基本上有两台分离器在那里工作。这可能值得手动处理,而不是使用标准的读取功能

读入文件,去掉引号,然后用空格和分号分隔符分隔

library( magrittr )
input <- readLines( "~/Desktop/Untitled" ) %>%
    gsub( '"|^# +', "", . ) %>%
    strsplit( "\\ +|;" )
然后使用第一行作为列名。我们需要在这里添加一个额外的名称,因为您的标题没有足够的名称来覆盖您的数据

names( df ) <- c( input[[1]][1:10], "fill.col", input[[1]][11] )

据我所知,基本上有两个分离器在那里工作。这可能值得手动处理,而不是使用标准的读取功能

读入文件,去掉引号,然后用空格和分号分隔符分隔

library( magrittr )
input <- readLines( "~/Desktop/Untitled" ) %>%
    gsub( '"|^# +', "", . ) %>%
    strsplit( "\\ +|;" )
然后使用第一行作为列名。我们需要在这里添加一个额外的名称,因为您的标题没有足够的名称来覆盖您的数据

names( df ) <- c( input[[1]][1:10], "fill.col", input[[1]][11] )
以下是我的尝试(并根据David Arenburg的评论编辑)

首先读取并处理标题行;然后在跳过第一行的同时阅读剩余的行:

library(data.table)

header <- strsplit(readLines('test.txt', n = 1), '\\s+')[[1]][-1]
res <- fread('test.txt', skip = 1, header = FALSE)
setnames(res, 1:3, header)

res[, strsplit(header[2], ';')[[1]] :=
        tstrsplit(get(header[2]), ';', type.convert = TRUE, fixed = TRUE)[-10]]

res[, header[2] := NULL]

#      word WN000000 len  freq mean sens npos         u orthon freqn  bgp
# 1:  fiber 10000000   5 8.671    1    5    1 0.0000000      5  6.10    0
# 2:   clad 10000000   4 6.780    2    2    1 1.0000000      8  7.84 2026
# 3: tucker 10000000   6 8.103    2    3    2 0.9182958      7  5.50 4547
库(data.table)
header以下是我尝试的内容(并根据David Arenburg的评论进行编辑)

首先读取并处理标题行;然后在跳过第一行的同时阅读剩余的行:

library(data.table)

header <- strsplit(readLines('test.txt', n = 1), '\\s+')[[1]][-1]
res <- fread('test.txt', skip = 1, header = FALSE)
setnames(res, 1:3, header)

res[, strsplit(header[2], ';')[[1]] :=
        tstrsplit(get(header[2]), ';', type.convert = TRUE, fixed = TRUE)[-10]]

res[, header[2] := NULL]

#      word WN000000 len  freq mean sens npos         u orthon freqn  bgp
# 1:  fiber 10000000   5 8.671    1    5    1 0.0000000      5  6.10    0
# 2:   clad 10000000   4 6.780    2    2    1 1.0000000      8  7.84 2026
# 3: tucker 10000000   6 8.103    2    3    2 0.9182958      7  5.50 4547
库(data.table)

标题所有这些都不能复制/复制到R中。请显示您的原始文本文件。您是否使用了
sep=“;”
read.csv
?@G5W:我使用了。该命令的问题是,实际值放在第一列,而不是正确地分布在标题中。@RomanLuštrik:我现在就解决它。所有这些都不能复制/复制到R中。请显示您的原始文本文件。您是否使用了
sep=“;”
read.csv
?@G5W:我使用了。该命令的问题在于,实际值被放在第一列,而没有正确地分布在标题中。@RomanLuštrik:我现在就解决它。这非常有效,非常感谢。有一个问题:=做什么?@RobertP。它是一个运算符,用于对
数据表执行“参照赋值”。你可以在这里找到更多信息:。这非常有效,非常感谢。有一个问题:=做什么?@RobertP。它是一个运算符,用于对
数据表执行“参照赋值”。您可以在此处找到更多信息:。这看起来是一个不错的解决方案,尽管它给出了一个不正确的结果-第一列应该是“len”,而不是word。谢谢你的帮助!正如@mt1022所注意到的,您的标题与数据不匹配。我将第一个列名设为散列,因为这是标题中的内容。如果您想移动名称,但仍然确保保留所有数据,则需要添加额外的列名。这看起来是一个不错的解决方案,尽管它给出了一个不正确的结果——第一列应该是“len”,而不是单词。谢谢你的帮助!正如@mt1022所注意到的,您的标题与数据不匹配。我将第一个列名设为散列,因为这是标题中的内容。如果您想移动名称,但仍然确保保留所有数据,则需要添加额外的列名。我已经更新了,可以做到这一点。