R:从字符串中提取前13个字符,并与其他字符串连接

R:从字符串中提取前13个字符,并与其他字符串连接,r,split,character,concatenation,R,Split,Character,Concatenation,我有一个数据框df,有三列ref,driver和tour ref driver tour 02062018-1130SGA->BRT-Buttes Chaumont Mark NA 02162018-1230BRT-A2Pas Courbevoie Marceau John NA 02067018-1300

我有一个数据框
df
,有三列
ref
driver
tour

                                      ref      driver       tour
    02062018-1130SGA->BRT-Buttes Chaumont        Mark         NA
02162018-1230BRT-A2Pas Courbevoie Marceau        John         NA
          02067018-1300SGA->BRT-Brune 2/2         Sam         NA
             020718-0800-CHILLY-CHARENTON      Claire        678
           020718-0800-CHILLY-BATIGNOLLES          NA         NA
我想变异一个新的列
ID
,如果
tour
是NA,它将
ref
driver
的前13个字母连接起来。如果tour不是NA,它只会在
tour
中返回相同的值。所以结果应该是这样的:

                                      ref      driver       tour                  ID
    02062018-1130SGA->BRT-Buttes Chaumont        Mark         NA   02062018-1130Mark
02162018-1230BRT-A2Pas Courbevoie Marceau        John         NA   02162018-1230John
          02067018-1300SGA->BRT-Brune 2/2         Sam         NA    02067018-1300Sam
             020718-0800-CHILLY-CHARENTON      Claire        678                 678
           020718-0800-CHILLY-BATIGNOLLES          NA         NA       020718-0800-C
请注意,如果
driver
列也是
NA
,我不想将
NA
作为字符,而是只想返回
ref
中的前13个字符

我的想法是使用
ifelse
函数,但我不知道如何处理前13个字母并连接到
Driver

df$ID <- ifelse(tour == NA, 
                yes = #####some function######, 
                no = tour)

df$ID您正在寻找与
paste0
结合使用的
substr

df1$ID <- ifelse(is.na(df1$tour), 
            paste0(substr(df1$ref, 1, 13), ifelse(is.na(df1$driver), "", df1$driver)), 
              df1$tour)

 "02062018-1130Mark" "02162018-1230John" "02067018-1300Sam"  "678"  "020718-0800-C" 

df1$ID非常感谢您的快速回答!当驱动程序列为
NA
时,它将
NA
作为一个字符,结果类似于“02162018-1230NA”。但我只想要“02162018-1230”,不带
NA
。我该如何处理这件事?对不起,我应该更清楚一些。我编辑了我的答案。在代码中添加了一个额外的ifelse