0

次のデータ フレームがあり、正の数ごとに (文字列として格納する必要があります)、先頭にスペースを追加したいと考えています。

d <- data.frame(c1 = c("4", "-1.5", "5", "-3"))

> d
    c1
1    4
2 -1.5
3    5
4   -3

これまでのところ、grep と invert を使用して、先頭にスペースを追加したい正の数のみを返しました。

d$c1[grep("-", d$c1, invert = TRUE)]

しかし、どうすればよいかわかりません。実際の数よりもインデックスを使用する必要があると思います。おそらくgsubを組み込んでいますか?そうですか?

4

3 に答える 3

4

を使用したアプローチを次に示しformatC()ます。を使用しても同様の結果が得られますsprintf()。単一のスペースを追加するだけではないことに注意してください。代わりに、このアプローチは各文字列を最大幅までパディングします。

d <- data.frame(c1 = c("4", "-1.5", "5", "-3"), stringsAsFactors = FALSE)
d <- transform(d, d2 = formatC(c1, width = 4), stringsAsFactors = FALSE)

R> d
    c1   d2
1    4    4
2 -1.5 -1.5
3    5    5
4   -3   -3
R> str(d)
'data.frame':   4 obs. of  2 variables:
 $ c1: chr  "4" "-1.5" "5" "-3"
 $ d2: chr  "   4" "-1.5" "   5" "  -3"

width引数がどうあるべきか事前にわからない場合は、次から計算しd$c1ます。

R> with(d, max(nchar(as.character(c1))))
[1] 4

またはインラインで直接使用する

d <- transform(d, d2 = formatC(c1, width = max(nchar(as.character(c1)))),    
               stringsAsFactors = FALSE)
于 2012-11-27T09:34:38.653 に答える
2

paste(' ',d[d[,1] > 0,])それはあなたが望むもののように見えますか?

于 2012-11-27T08:07:08.510 に答える