2016-07-21 26 views
-2

Rの数値ベクトルの特定の値を置き換える必要があります。次のようなデータフレームがあります。 5 = Cの( "W")、6:10 = Cの( "X")、11:私は、1という文字列とX1の特定の数値の全てを必要とする、この特定のデータフレームにRのデータフレームの特定の数値を文字列に置き換える

X1 = 1:20 
X2 = c(letters[1:20]) 
df = data.frame(X1, X2) 
df <- df[sample(nrow(df)),] 
df 
    X1 X2 
1 2 b 
2 18 r 
3 16 p 
4 7 g 
5 3 c 
6 1 a 
7 14 n 
8 10 j 
9 8 h 
10 11 k 
11 17 q 
12 6 f 
13 15 o 
14 13 m 
15 19 s 
16 5 e 
17 4 d 
18 9 i 
19 12 l 
20 20 t 

:15 = c( "y")、および16:20 = c( "z")。上記のデータフレームは次のようになります:

X1 X2 
1 w b 
2 z r 
3 z p 
4 x g 
5 w c 
6 w a 
7 y n 
8 x j 
9 x h 
10 y k 
11 z q 
12 x f 
13 y o 
14 y m 
15 z s 
16 w e 
17 w d 
18 x i 
19 y l 
20 z t 

ありがとうございます!

+0

あなたがexpeを変更している場合は、他の人に知らせてください再度出力を終了する。 – akrun

答えて

0

我々はfindInterval

df$X1 <- with(df, findInterval(X1, c(1, 6, 11, 16))) 
df$X1 
#[1] 1 4 4 2 1 1 3 2 2 3 4 2 3 3 4 1 1 2 3 4 

NOTEを使用することができます。これは、予想される出力はOPのポストに示した返します。ここでは、新たな出力に基づいて

v1 <- setNames(1:4, c("w", "x", "y", "z")) 
df$X1 <- names(v1[with(df, findInterval(X1, c(1, 6, 11, 16)))]) 
df$X1 
#[1] "w" "z" "z" "x" "w" "w" "y" "x" "x" "y" "z" "x" "y" "y" "z" "w" "w" "x" "y" "z" 
0

は、文字変換のためのchartr機能を利用すること、新たな所望の出力のための新しいソリューションです:

(from <- paste(letters[1:20], collapse = "")) 
# [1] "abcdefghijklmnopqrst" 
(to <- paste(rep(c("w", "x", "y", "z"), each = 5), collapse = "")) 
# [1] "wwwwwxxxxxyyyyyzzzzz" 

# chartr will translate the characters in its first argument 
# to the corresponding characters in its second argument 
# when it finds instances of those characters in its third argument 
df$X1 <- chartr(from, to, df$X2) 
#[1] "w" "z" "z" "x" "w" "w" "y" "x" "x" "y" "z" "x" "y" "y" "z" "w" "w" "x" "y" "z" 

別の解決策は、ルックアップテーブルになります名前付きベクトルを使用して:

to <- rep(c("w", "x", "y", "z"), each = 5) 
names(to) <- paste(letters[1:20]) 
to 
# a b c d e f g h i j k l m n o p q r s t 
#"w" "w" "w" "w" "w" "x" "x" "x" "x" "x" "y" "y" "y" "y" "y" "z" "z" "z" "z" "z" 

df$X1 <- to[df$X2] 
#[1] "w" "z" "z" "x" "w" "w" "y" "x" "x" "y" "z" "x" "y" "y" "z" "w" "w" "x" "y" "z" 
関連する問題