将字符添加到数据集中的字符串子集

时间:2012-07-19 15:41:08

标签: string r conditional character add

假设我有一个数据集:

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

其中列'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]受到影响。奇怪的是,结果是test [10,2] =“01011”,而test [11,2] =“01011”。这意味着所有具有两个字符的字符串都粘贴在一起,前面带有“0”。这绝对不是我想看到的。

当满足某些条件(长度)时,我应该怎么做才能在数据集中的字符串中只添加一个字符? 非常感谢您的回答。

3 个答案:

答案 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"

答案 1 :(得分: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

答案 2 :(得分:2)

我会做与ttmaccer建议相同的事情,除了我会使用paste0,它自动连接它们没有任何空格。它比粘贴更有效,所以如果你有一个大的数据集,它是值得做的。这意味着您不必记住'sep'参数。

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