2017-07-31 124 views
0

我有以下列格式數據:粘貼值

在柱A:

String1__String2__String3 

在B欄:

Value 

我想值粘貼到第一個分隔符後的字符串如下:

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 

琴絃珍,DoesSomething,inaCity變化和是不一樣的長度。只有分隔符保持不變。我想在第一個分隔符後面粘貼。

謝謝!

+0

感謝。但是,您能否詳細說明我應該如何將其集成到我的代碼中。我應該在哪裏放這個,我應該如何命名這個?值和字符串是不同的,而不是相同的。再次感謝。 – digit

+0

請提供可重現的示例和預期輸出 – Sotos

+0

請參閱更新以獲取更好的示例。謝謝。 – digit

回答

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" 

DATA

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") 
+0

謝謝。不知道我應該如何將這個應用到我擁有的整個DF上。在我的代碼中,「paste(df [,1],i,sep =」_「))」中的df2行將字符串粘貼到每個包含數據的單元格中。我從來沒有用過mapply。我可以將mapply添加到我的代碼中嗎?或者我必須重做它。謝謝 – digit

+0

我不太明白你的意思(加上我不知道你的代碼是什麼樣的)。最好的辦法是提供一個可重複的例子(看看我的)以及預期的輸出。你描述它的方式'df $ new < - mapply(.........)'應該給出你想要的結果 – Sotos

+1

好的非常感謝你的幫助。這工作 – digit