使read.csv不将单个空格视为R中的除味器

使read.csv不将单个空格视为R中的除味器,r,R,我有很多数据帧,有时看起来像这样: EC number hits family distribution 3.2.1.x 3 3 CBM32 3.2.1.1 2 2 CBM41 3.2.1.4 2 2 CBM3 2.4.1.18 1 1 CBM48 3.2.1.14 4 1 CBM2 1 CBM5 2 CBM16 3.2.1.39 4 3 CBM13 1 CBM32 3.2.1.50 1 1 CBM32 3.2.1.55 1

我有很多数据帧,有时看起来像这样:

EC number   hits    family distribution
3.2.1.x 3   3 CBM32
3.2.1.1 2   2 CBM41
3.2.1.4 2   2 CBM3
2.4.1.18    1   1 CBM48
3.2.1.14    4   1 CBM2  1 CBM5  2 CBM16
3.2.1.39    4   3 CBM13 1 CBM32
3.2.1.50    1   1 CBM32
3.2.1.55    1   1 CBM13
3.2.1.68    2   2 CBM48
对于最后一列,有时有多个条目通过空格分隔

我用这个来读入R:

test=read.csv("path/to/summary.txt", header = TRUE, sep = "\t")
但我得到以下输出:

    EC.number  hits family.distribution
1   3.2.1.x 3   3 CBM32
2   3.2.1.1 2   2 CBM41
3   3.2.1.4 2   2 CBM3
4   2.4.1.18    1   1 CBM48
5   3.2.1.14    4   1 CBM2
6   1 CBM5  2 CBM16 
7   3.2.1.39    4   3 CBM13
8   1 CBM32     
9   3.2.1.50    1   1 CBM32
10  3.2.1.55    1   1 CBM13
11  3.2.1.68    2   2 CBM48

我怎样才能避开这件事?我想我已经解释了我的问题,但如果我没有解释,请随时询问更多信息:)

您可以尝试将数据读取为字符串,然后修改它(例如使用
gsub
将所有选项卡替换为单个空格),然后将其读取为数据。框架:

# Read the csv as text, so we can run it through gsub
#
file_connection <- file("path_to_csv.csv")
text <- readLines(file_connection)
close(file_connection)
然后我们用逗号替换一个或多个后续空格或制表符

sanitized <- gsub("[ \t]+", ",", santized_names)    

数据框不能为一列的每行保存多个条目。也许你可以逐行阅读并创建一个列表()。我想不出一个简单的单行解决方案。@JAQuent有一种方法可以使它要么把最后一列拼凑在一起,要么忽略它。最后我尝试了[,1:2],但结果还是一样。@G.Grothendieck,只有在我能够读入数据的情况下才有效。
sanitized <- gsub("[ \t]+", ",", santized_names)    
sanitized <- paste0(sanitized, collapse="\n")
df <- read.csv(text=sanitized)