在 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
转换为整数以防止结果有小数位。
我有两个不同的文件,它们使用的数据引用名称略有不同。在 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
转换为整数以防止结果有小数位。