如何替换data.frame中的列值?

时间:2015-10-21 09:43:08

标签: r replace dataframe apply

我有两个data.frame。

d <- data.frame(a=letters[1:5], b=c(1:5))
  a b
1 a 1
2 b 2
3 c 3
4 d 4
5 e 5

t <- data.frame(old=c('a','c','d'), new=c('aa','cc','dd'))
  old new
1   a  aa
2   c  cc
3   d  dd

我想替换如下。

  a b
1 aa 1
2 b  2
3 cc 3
4 dd 4
5 e  5

我想使用apply函数。 我该怎么办?

3 个答案:

答案 0 :(得分:1)

我们可以使用来自data.table的加入。我们将'data.frame'转换为'data.table'(setDT(d))并在第一列上加上't'`',将'a'列分配为'new'来替换值来自'd'数据集的'a'。

library(data.table)#v1.9.6+
setDT(d)[t, a:= new, on=c('a'='old')][]
d
#    a b
#1: aa 1
#2:  b 2
#3: cc 3
#4: dd 4
#5:  e 5

答案 1 :(得分:1)

因为你有因素:

levels(d$a)[match(t$old, levels(d$a))] <- as.character(t$new)
#   a b
#1 aa 1
#2  b 2
#3 cc 3
#4 dd 4
#5  e 5

如果t$old之一不在d$a,则会出错。

答案 2 :(得分:0)

已使用merge以及ifelse

df <- merge(d, t, all.x = T, by.x = "a", by.y = "old")
df$a <- ifelse(is.na(df$new), as.character(df$a), as.character(df$new))
#Removing the "new" column
df <- df[, -3]

#a b
#1 aa 1
#2  b 2
#3 cc 3
#4 dd 4
#5  e 5