替换数据框中的值,其中矢量值与另一个数据帧中的索引匹配

时间:2018-01-06 22:30:11

标签: r vector indexing match matching

也许问题和答案已经发布,但我无法找到它。此外,有没有最佳方法来解决这个问题? 因为这只是某些行的示例,但我会将其应用于大约100万行的数据框。

我是R的新手。

我有两个数据框

DF1:
   a b
1  1 0
2  2 0
3  2 0
4  3 0
5  5 0

DF2
  l
1 A
2 B
3 C
4 D
5 E

我尝试做的是将DF1 $ a中的值与DF2的索引相匹配,并将这些值分配给DF1 $ b,这样我的结果将是以下方式。

DF1:
   a b
1  1 A
2  2 B
3  2 B
4  3 C
5  5 E

我编写了一个for循环来执行此操作,但似乎我错过了一些东西

for(i in 1:length(df1$a)){
  df1$b[i] <- df2$l[df1$a[i]]
}

这会产生以下结果:

DF1:
   a b
1  1 1
2  2 2
3  2 2
4  3 3
5  5 5

提前致谢:)

1 个答案:

答案 0 :(得分:2)

我们可以使用merge根据行ID和a合并两个数据框。

# Create example data frame
DF1 <- data.frame(a = c(1, 2, 2, 3, 5))
DF2 <- data.frame(l = c("A", "B", "C", "D", "E"),
                  stringsAsFactors = FALSE)

# Create a column called a in DF2 shows the row id
DF2$a <- row.names(DF2)

# Merge DF1 and DF2 by a
DF3 <- merge(DF1, DF2, by = "a", all.x = TRUE)

# Change the name of column l to be b
names(DF3) <- c("a", "b")

DF3
#   a b
# 1 1 A
# 2 2 B
# 3 2 B
# 4 3 C
# 5 5 E