2012-07-19 21 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