我在R中有一个名为dfData的数据帧,如下所示;
x y
10 A
20 B
30 C
40 D
我正在努力实现以下目标;
如果X中的值为10,则将值更新为“XYZ”
在R中有这样的功能或优雅的方法吗?试图避免多个ifelse语句。
由于
答案 0 :(得分:0)
如果您需要根据x值替换多个y值,那么一种可靠的方法是:
# 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配对。
答案 1 :(得分:0)
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