2016-08-16 48 views
2

我有一個字符串和10列值的數據的數據。我不能將第一列設置爲行列,我發現我的第一列中有重複的字符串。所以我所做的就是找出他們像下面如何添加一個字符到一個複製的字符串,然後刪除它

dftt <- data.frame(myname[which(duplicated(myname)),]) 

如下所示

dftt<- structure(list(V1 = structure(c(6L, 6L, 4L, 6L, 2L, 9L, 10L, 
1L, 7L, 11L, 10L, 3L, 8L, 5L, 10L, 10L, 1L, 10L, 11L, 1L), .Label = c("alp-1", 
"cfim-2", "eps-8", "fln-2", "istr-1", "lev-11", "pqn-87", "ret-1", 
"sao-1", "sup-26", "vab-10"), class = "factor")), .Names = "V1", class = "data.frame", row.names = c(NA, 
-20L)) 

DFTT的一小部分我想要的是添加了一些重複的字符串,使他們唯一的,這樣我可以可以將其設置爲行名,但保持和它或東西比我操縱數據之後指數,我擺脫他們

爲例它可以是數字或特定字母

#  V1 
#1 lev-11 
#2 lev-11_nik1 
#3 fln-2 
#4 lev-11_nik2 
#5 cfim-2 
#6 sao-1 
#7 sup-26 
#8 alp-1 
#9 pqn-87 
#10 vab-10 
#11 sup-26_nik1 
#12 eps-8 
#13 ret-1 
#14 istr-1 
#15 sup-26_nik2 
#16 sup-26_nik3 
#17 alp-1_nik1 
#18 sup-26_nik4 
#19 vab-10 
#20 alp-1_nik2 

我大概知道我必須使用paste0但我不知道

回答

2

一是如何確定重複:

dup <- duplicated(dftt$V1) 

現在使具有獨特的列的所有值make.unique()

dftt$V1 <- make.unique(as.character(dftt$V1), sep = "_nik") 
head(dftt) 
#    V1 
# 1  lev-11 
# 2 lev-11_nik1 
# 3  fln-2 
# 4 lev-11_nik2 
# 5  cfim-2 
# 6  sao-1 

要將值返回到其原始狀態,請刪除_nik和尾隨位(S)從所述字符串的末尾與sub()

dftt$V1[dup] <- sub("_nik\\d+$", "", dftt$V1[dup]) 
head(dftt) 
#  V1 
# 1 lev-11 
# 2 lev-11 
# 3 fln-2 
# 4 lev-11 
# 5 cfim-2 
# 6 sao-1 

注意,這將列類型從因子改變爲字符。

相關問題