如何在R中使用特定符号合并两列?

43

我在R中读入了一个表格,如下所示:

column1 column2
A        B

如何使用命令将两列进行如下匹配?

Column 3
A_B
2个回答

65

我有点不确定你所说的“合并”是什么意思,但这是否是你的意思?

> 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='_'))

为了在一个或两个元素缺失的情况下返回NA,您可以使用如下的ifelse()语句:within(DF, C <- ifelse(is.na(A)==TRUE | is.na(B)==TRUE, NA, paste(A, B, sep='_'))). - ulfelder
1
在Paste中是否有自动忽略NA值的方法? - myloginid

15

我个人最喜欢的方法是利用 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引入到您的工作流中,可以在创建所需列之前方便地删除不必要的行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接