2012-07-19 47 views
2

假設我有一個數據集:添加字符子集鏈中的數據集

test = data.frame(x=c(1:11), y=as.character(c(1:11))) 

其中collumn「Y」是由字符/字符串。 現在,我想更改包含兩個字符(即test [10,2] & test [11,2])的字符串,以便這些字符串以字符「0」開頭。這個結果將是「010」&「011」,而其他字符串(只有一個字符)保持不變。 對我來說,合理的解決辦法是:

test[nchar(test[,2])==2,2] = paste(c("0", test[nchar(test[,2])==2,2]), collapse="") 

事實上,只有測試[10.2] &測試[11.2]受到影響。奇怪的是,結果是測試[10,2] =「01011」,測試[11,2] =「01011」。這意味着具有兩個字符的所有字符串都與先前的「0」粘貼在一起。這絕對不是我想看到的。

當某些條件(長度)滿足時,我應該怎麼做才能將一個字符添加到數據集中的字符串中? 您的回答將不勝感激。

回答

4

使用

paste("0", test[nchar(test[,2])==2,2], sep="") 

因此,例如

> test[nchar(test[,2])==2,2] = paste("0", test[nchar(test[,2])==2,2], sep="") 
> test 
    x y 
1 1 1 
2 2 2 
3 3 3 
4 4 4 
5 5 5 
6 6 6 
7 7 7 
8 8 8 
9 9 9 
10 10 010 
11 11 011 

collapsesep有不同的屬性

> paste(1,c(2:3),collapse=',') 
[1] "1 2,1 3" 
> paste(1,c(2:3),sep=',') 
[1] "1,2" "1,3" 
+0

哇傢伙,偉大而迅速respons!你所有的方法都給我提供了正確的解決方案(正如你已經知道的那樣!)。 @詹姆斯,謝謝你,感謝你給我展示了一種完全不同的使用變換做事的方式!我仍然非常瞭解R – user1538235 2012-07-19 16:47:19

+0

@Liz桑德,謝謝你當然指着'paste0'! – user1538235 2012-07-19 16:48:08

2

我會做同樣的事情ttmaccer表明,除了我會用paste0,它會自動連接它們而不需要任何spa CES。它比粘貼效率高一點,所以如果你有一個大的數據集,這可能是值得的。這意味着你不必記住'sep'參數。

test[nchar(test[,2])==2,2] = paste0("0", test[nchar(test[,2])==2,2]) 
3

也許會使用ifelse更具可讀性:

transform(test,y=ifelse(nchar(y)==2,paste0("0",y),y)) 
    x y 
1 1 1 
2 2 2 
3 3 3 
4 4 4 
5 5 5 
6 6 6 
7 7 7 
8 8 8 
9 9 9 
10 10 010 
11 11 011