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

时间:2015-01-12 21:35:36

标签: r read.table

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

所以,我有两个问题:

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

2)如果可以的话,以这种方式做得更快或者像我之前那样使用后期处理?

以下是数据的一些示例:

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

1 个答案:

答案 0 :(得分:4)

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

示例:

# 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作为&#34;后端&#34;)。我将var2转换为整数,以防止结果出现小数位。