这个问题是对paste two data.table columns的跟进,因此我会使用相同的例子:
从data.table
开始:
dt <- data.table(L=1:5,A=letters[7:11],B=letters[12:16])
L A B
1: 1 g l
2: 2 h m
3: 3 i n
4: 4 j o
5: 5 k p
我想创建一个新列,它是两列的组合,dt$A
和dt$B
。
dt[, new := paste0(A, B)]
dt
L A B new
1: 1 g l gl
2: 2 h m hm
3: 3 i n in
4: 4 j o jo
5: 5 k p kp
由于我使用new
作为一种ID列,并且更喜欢某些人类可读性,我想使用一个字符来分隔dt$A
和{{1}的内容所以:
dt$B
但这会意外地改变这种行为:
dt[, new := paste0(A, B, collapse = ".")]
答案 0 :(得分:0)
以上是>>> rm_sub('abcdc.me','.me')
'abcdc'
的预期行为 - 实现上述目标的解决方案实际上是paste0
:
创建列paste
作为new
和dt$A
的串联以及用于分隔内容的字符,请使用dt$B
代替paste
:
paste0
例如,将dt <- data.table(L=1:5,A=letters[7:11],B=letters[12:16])
dt[ , new := paste(A, B, collapse = ".")]
dt
L A B new
1: 1 g l g.l
2: 2 h m h.m
3: 3 i n i.n
4: 4 j o j.o
5: 5 k p k.p
与paste0
一起使用,更改collapse = "."
的输出,如文档概述:
如果为 paste0
指定了值,那么结果中的值将连接成一个字符串,其中的元素由 collapse
。
答案 1 :(得分:0)
只需使用sep
作为paste()
的参数,而不是collapse
:
dt[, new := paste(A, B, sep = ".")]
dt
# L A B new
#1: 1 g l g.l
#2: 2 h m h.m
#3: 3 i n i.n
#4: 4 j o j.o
#5: 5 k p k.p
paste0()
并不尊重sep
参数(请参阅?paste0
)。