条件更新值

时间:2017-05-15 14:56:20

标签: sql r

我在R中有一个名为dfData的数据帧,如下所示;

x   y 
10  A
20  B
30  C
40  D

我正在努力实现以下目标;

如果X中的值为10,则将值更新为“XYZ”

在R中有这样的功能或优雅的方法吗?试图避免多个ifelse语句。

由于

2 个答案:

答案 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
相关问题