在某个分隔符后粘贴值

时间:2017-07-31 14:03:08

标签: r

我的数据格式如下:

在A栏:

String1__String2__String3

在B栏:

Value

我想在第一个分隔符之后将Value粘贴到String中:

String1__Value__String2__String3

我现在使用的代码的关键部分(我粘贴值的地方)是以下行:

df2 <-cbind(df[1],apply(df[,2:ncol(df)],2,function(i)ifelse(is.na(i), NA, paste(df[,1],i,sep="_")))) 

使用此代码,它会在字符串后附加值,如下所示:

String1__String2__String3__Value

是否有一种简单的方法可以重新排列,以便将值粘贴到正确的位置。或者我是否必须重做完整的代码?

谢谢

更新,例如:

A栏:

Jennifer__DoesSomething__inaCity

B栏:

2

结果现在:

Jennifer__DoesSomething__inaCity__2

期望的结果:

Jennifer__2__DoesSomething__inaCity

字符串Jennifer,DoesSomething,inaCity更改并且长度不同。只有分隔符保持不变。我想在第一个分隔符后粘贴。

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个想法。使用sub我们只替换第一个看到的模式。因此,使用mapply,我们将第一列中的所有数字替换为第二列上的相应字符串。

mapply(function(x, y) sub('__', paste0('__', y, '__'), x), df$v1, df$v2)

#     atsfs__dsfgg__sdgsdg          eeee__FFFF__GGGG 
#"atsfs__3__dsfgg__sdgsdg"     "eeee__5__FFFF__GGGG" 

数据

dput(df)
structure(list(v1 = c("atsfs__dsfgg__sdgsdg", "eeee__FFFF__GGGG"
), v2 = c(3, 5)), .Names = c("v1", "v2"), row.names = c(NA, -2L
), class = "data.frame")