【问题标题】:Replacing values in a column of a data.frame with values from another data.frame将 data.frame 列中的值替换为另一个 data.frame 中的值
【发布时间】:2014-09-21 10:08:27
【问题描述】:

我的情况是我有一个数据框,其中有一列填充了整数 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 阅读)。有什么想法吗?

【问题讨论】:

  • 我会为此使用merge
  • 谢谢。这几乎是我正在寻找的。我想替换列中的值,而不是在数据框中添加额外的列。
  • 嗯... df$V1

标签: r replace dataframe


【解决方案1】:

你可以试试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))

【讨论】:

  • @akrun,你知道如何将匹配中的 nomatch 参数更改为不替换。即什么都不做?
  • @mattbawn 你可以使用nomatch=0 并且R中的索引从1开始,所以无论哪里有0,它都被遗漏了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多