我在R中读入了一个表格,如下所示:
column1 column2
A B
如何使用命令将两列进行如下匹配?
Column 3
A_B
我有点不确定你所说的“合并”是什么意思,但这是否是你的意思?
> DF = data.frame(A = LETTERS[1:10], B = LETTERS[11:20])
> DF$C = paste(DF$A, DF$B, sep="_")
> head(DF)
A B C
1 A K A_K
2 B L B_L
3 C M C_M
4 D N D_N
或者等价地,如@daroczig指出:
within(DF, C <- paste(A, B, sep='_'))
我个人最喜欢的方法是利用 tidyr
中的 unite
函数:
set.seed(1)
df <- data.frame(colA = sample(LETTERS, 10),
colB = sample(LETTERS, 10))
# packs: pipe + unite
require(magrittr); require(tidyr)
# Unite
df %<>%
unite(ColAandB, colA, colB, remove = FALSE)
> head(df, 3)
ColAandB colA colB
1 G_F G F
2 J_E J E
3 N_Q N Q
个人认为unite函数的remove = TRUE / FALSE
功能非常有用。此外,tidyr
很适合dplyr
工作流,并且与separate
搭配使用,以便在需要时拆分已合并的列。同样,如果NA
是问题,将na.omit
引入到您的工作流中,可以在创建所需列之前方便地删除不必要的行。
ifelse()
语句:within(DF, C <- ifelse(is.na(A)==TRUE | is.na(B)==TRUE, NA, paste(A, B, sep='_')))
. - ulfelder