在 R 中,我可以在使用 read.table 导入数据时合并列吗?

In R can I combine colums when importing data with read.table?

我有两个不同的文件,它们使用的数据引用名称略有不同。在 file1 中它看起来像 ND-1234,而在 file2 中它显示为 ND 1234。问题是数据是用空格分隔的,所以我在 file2 中的标识符将创建 2 列。我知道我可以将 file2 导入 data.frame,然后对其进行操作以组合这些列,但它是一个相当大的文件,所以我更愿意在导入时执行此操作。

那么,我有两个问题:

1) 我可以在导入时强制 file2 合并第 1 列和第 2 列以创建看起来像 ND-1234 的数据吗? (请注意,这还需要在两列数据之间插入一个“-”)

2) 如果可能的话,这样做更快还是像以前那样使用 post 处理?

以下是一些数据示例:

FILE1:
1       2 3 4 5 6
-----------------
ND-1234 1 A C T G
ND-412  1 T C A A

FILE2:
1  2    3    4
----------------
ND 1234 1.23 xyz 
ND 412  0.23 abc

WHAT I WANT is to import file2 to look like this:
1       2    3
----------------
ND-1234 1.23 xyz
ND-412  0.23 abc

我认为在导入数据时不可能直接这样做。但是,您可以将这些值粘贴在一起。

示例:

# Sample:
df <- data.frame(
  var1 = c('ND','ND'),
  var2 = c(1234,412),
  var3 = c(1.23, 0.23),
  var4 = c('xyz','abc'),
  stringsAsFactors=F
)

# Paste the values together, and store them in a new column:
df$var5 <- paste(df$var1, df$var2, sep='-')

# Get the desired columns:
df[,c('var5','var2','var3','var4')]
##     var5 var2 var3 var4
##1 ND-1234 1234 1.23  xyz
##2  ND-412  412 0.23  abc

另一种可能的解决方案(但可能有点矫枉过正)是使用 sqldf 包:

library(sqldf)
sqldf("select var1 || '-' || cast(var2 as int) as new_var, var3, var4 from df")
##  new_var var3 var4
##1 ND-1234 1.23  xyz
##2  ND-412 0.23  abc

|| 运算符用于连接字符串(sqldf 使用 SQLite 作为 "backend")。我将 var2 转换为整数以防止结果有小数位。