R:在data.frame中粘贴间距

时间:2014-09-16 11:17:09

标签: r paste

我有一个数据框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="")

3 个答案:

答案 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将替换为整数。