我有一个数据框u
,其中我想将其他列粘贴到列NAME
u <- data.frame(NAME=c("NAME1", "NAME1","NAME1","NAME1","NAME2","NAME2","NAME2"),PU=c("CH","CH","CH","CH","AU","AU","AU"),ID=c(47,47,47,47,259,259,259),YEAR=c(1932,1942,1965,1989,2007,2008,2014),VALUE=c(0,NA,-6,-16,0,-9,-28))
u
NAME PU ID YEAR VALUE
1 NAME1 CH 47 1932 0
2 NAME1 CH 47 1942 NA
3 NAME1 CH 47 1965 -6
4 NAME1 CH 47 1989 -16
5 NAME2 AU 259 2007 0
6 NAME2 AU 259 2008 -9
7 NAME2 AU 259 2014 -28
# paste columns PU and ID into column NAME
u$NAME <-paste(u$NAME, u$PU, '(ID:',u$ID,')')
我尝试做的是将其粘贴为以下格式,例如第一行: NAME1 CH(ID:47)但是使用我上面的代码我得到NAME1 CH(ID:47)
我怎样才能摆脱身份证号码和结束括号之间的空格?我尝试使用失败的sep=""
......
u$NAME <-paste(u$NAME, u$PU, '(ID:',u$ID,')', sep="")
答案 0 :(得分:0)
你可以尝试:(如果我没记错的话)
使用您的代码,尝试使用regex
删除space
后面的额外)
gsub(" (?=\\))", "",paste(u$NAME, u$PU, '(ID:',u$ID,')'), perl=TRUE)
#[1] "NAME1 CH (ID: 47)" "NAME1 CH (ID: 47)" "NAME1 CH (ID: 47)"
#[4] "NAME1 CH (ID: 47)" "NAME2 AU (ID: 259)" "NAME2 AU (ID: 259)"
#[7] "NAME2 AU (ID: 259)"
在此,我使用lookahead
匹配space
后跟)
,即" (?=\\))"
,并将其替换为""
。
或者
paste(paste(u$NAME, u$PU), paste0("(ID: ", u$ID, ")"))
#[1] "NAME1 CH (ID: 47)" "NAME1 CH (ID: 47)" "NAME1 CH (ID: 47)"
#[4] "NAME1 CH (ID: 47)" "NAME2 AU (ID: 259)" "NAME2 AU (ID: 259)"
#[7] "NAME2 AU (ID: 259)"
或者
with(u, paste0(paste(NAME, PU, "(ID:", ID),")"))
# [1] "NAME1 CH (ID: 47)" "NAME1 CH (ID: 47)" "NAME1 CH (ID: 47)"
#[4] "NAME1 CH (ID: 47)" "NAME2 AU (ID: 259)" "NAME2 AU (ID: 259)"
#[7] "NAME2 AU (ID: 259)"
答案 1 :(得分:0)
尝试
u$NAME <-paste(u$NAME, " ", u$PU, " (ID: ", u$ID, ")", sep="")
说明:只需将所有字符串粘贴到&#34;&#34;作为分隔符,并确保在需要时包含额外的空格。
答案 2 :(得分:0)
您还可以使用sprintf
:
with(u, sprintf('%s %s (ID: %d)', NAME, PU, ID))
%s
表示它将被字符串替换,%d
将替换为整数。