私は以下のようにRにdfDataというデータフレームを持っています。条件付き更新値
x y
10 A
20 B
30 C
40 D
私は以下を達成しようとしています。 Xの値が10の場合
は、「XYZ」
機能またはRでこれを行うには、エレガントな方法はありに値を更新しますか?複数のifelseステートメントを回避しようとしています。
おかげ
私は以下のようにRにdfDataというデータフレームを持っています。条件付き更新値
x y
10 A
20 B
30 C
40 D
私は以下を達成しようとしています。 Xの値が10の場合
は、「XYZ」
機能またはRでこれを行うには、エレガントな方法はありに値を更新しますか?複数のifelseステートメントを回避しようとしています。
おかげ
あなたはxの値に応じて、多くのyの値を交換する必要がある場合は、1つのかのうアプローチは次のとおりです。
# define df as data.table
library(data.table)
df <- data.table(x=c(10,20,30,40,50,60,70,80,90), y= c('A', 'B', 'C', 'D','A', 'B', 'C', 'D', 'A'))
> df
x y
1: 10 A
2: 20 B
3: 30 C
4: 40 D
5: 50 A
6: 60 B
7: 70 C
8: 80 D
9: 90 A
# define your pair of values for replacement
a <- c(10,20,50)
b <- c('XYZ', 'ZYX', 'AAA')
# x = 10 will cause y to be replaced by 'XYZ', x= 20 will cause y to be replaced by 'ZYX' and so on ...
# replacement
for (i in 1:length(a)) {
df[ x==a[i], y := b[i]]
}
> df
x y
1: 10 XYZ
2: 20 ZYX
3: 30 C
4: 40 D
5: 50 AAA
6: 60 B
7: 70 C
8: 80 D
9: 90 A
ベクトルa、bは任意の長さを持っていますが、値xとペアにする必要がある可能性がありと値y。
x <- c(10,20,30,40)
y <- c("a", "b", "c", "d")
df1 <- data.frame(x,y)
df1$y <- as.character(df1$y)
Now we get the data frame as you want:
> df1
x y
1 10 a
2 20 b
3 30 c
4 40 d
> df1[which(df1$x==10),2] <- 'xyz'
This produces:
> df1
x y
1 10 xyz
2 20 b
3 30 c
4 40 d
私の場合は同じ値を更新したいのですが、私は基本的に10をxyzにします。 – femi
ただ1つの交換が必要ですか?または、変更したい値がさらにたくさんありますか? –
あなたの説明によると、複数のifelseは必要ありません。一つだけ。さもなければ、あなたは 'replace'を使うことができます – Sotos
優雅さのために、data.tableを使うときに' DT [x == 10、y:= "XYZ"] 'があります。代わりに、ええ、 'replace'は悪くない:' transform(DF、y = replace(y、x == 10、 "XYZ")) 'または何か。条件付きで割り当てたい値がさらにある場合は、data.tableの「更新結合」があります。http://franknarf1.github.io/r-tutorial/_book/tables.html#joins-updateする必要がありますしかし、より完全な例を投稿してください。 – Frank