使用另一个data.frame中的值替换data.frame列中的值

时间:2014-09-21 10:08:28

标签: r replace dataframe

我的情况是我有一个数据框,其中一列填充了整数1到6.我想用更具描述性的标签替换这些整数,在另一个充当“键”的数据框中提供:

  V1                 V2
1  1             LABEL1
2  2             LABEL2
3  3             LABEL3
4  4             LABEL4
5  5             LABEL5
6  6             LABEL6

因此,每当我在第一个数据框列(df $ colX)中找到数字1时,我想用LABEL1替换它(即标签第2列,其中df $ colX ==标签第1列)。

我试过了     replace(df$colX,labels[,1],labels[,2]) 但由于某种原因,这只是将整数转换为引用的整数。

我可以使用for循环执行此操作,但这看起来非常慢。

我也在StackOverflow上关于因素的一些建议,但是我在这里使用的列都没有涉及因素(使用stringsAsFactors = FALSE读取)。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试match

 df$colX <- labels[,2][match(df$colX, labels[,1])]

甚至以下情况也应该起作用

 labels[,2][df$colX]
 #[1] "LABEL3" "LABEL5" "LABEL1" "LABEL6" "LABEL1" "LABEL6" "LABEL4" "LABEL3"
 #[9] "LABEL1" "LABEL2" "LABEL2" "LABEL3" "LABEL6" "LABEL4" "LABEL5" "LABEL1"
 #[17] "LABEL4" "LABEL5" "LABEL3" "LABEL5" "LABEL1" "LABEL3" "LABEL1" "LABEL1"
 #[25] "LABEL2"

数据

 labels <- structure(list(V1 = 1:6, V2 = c("LABEL1", "LABEL2", "LABEL3", 
 "LABEL4", "LABEL5", "LABEL6")), .Names = c("V1", "V2"), class = "data.frame", row.names = c("1", 
 "2", "3", "4", "5", "6"))

 set.seed(25)
 df <- data.frame(colX= sample(1:6,25, replace=TRUE), colY=rnorm(25))