使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)