2

データセットがあるとします。

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

ここで、列「y」は文字/文字列で構成されています。ここで、2つの文字を含む文字列(つまり、test[10,2]とtest[11,2])を変更して、これらの文字列が文字「0」で始まるようにします。この結果は「010」と「011」になりますが、他の文字列(1文字のみ)は​​同じままです。私にとって、論理的な解決策は次のようになります。

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

実際、影響を受けるのはtest[10,2]とtest[11,2]だけです。ただし、奇妙なことに、結果はtest [10,2] = "01011"であり、test [11,2]="01011"です。これは、2文字のすべての文字列が、前の「0」と一緒に貼り付けられることを意味します。これは間違いなく私が見たいものではありません。

(長さの)特定の条件が満たされたときに、データセット内の文字列に1文字だけを追加するにはどうすればよいですか?ご回答いただければ幸いです。

4

3 に答える 3

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"
于 2012-07-19T15:49:48.043 に答える
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
于 2012-07-19T15:57:15.903 に答える
2

ttmaccerが提案するのと同じことを行いますが、paste0を使用する点が異なります。これにより、スペースなしで自動的に連結されます。貼り付けるよりも少し効率的であるため、データセットが大きい場合は実行する価値があります。これは、「sep」引数も覚えておく必要がないことを意味します。

test[nchar(test[,2])==2,2] = paste0("0", test[nchar(test[,2])==2,2])
于 2012-07-19T15:54:51.383 に答える