【发布时间】:2016-06-08 18:13:34
【问题描述】:
我在替换数据框中的值时遇到了一些问题。我想根据单独的表格替换值。下面是我正在尝试做的一个示例。
我有一张表格,其中每一行都是客户,每一列都是他们购买的动物。让我们将此数据框称为table。
> table
# P1 P2 P3
# 1 cat lizard parrot
# 2 lizard parrot cat
# 3 parrot cat lizard
我还有一个名为 lookUp 的表,我将引用它。
> lookUp
# pet class
# 1 cat mammal
# 2 lizard reptile
# 3 parrot bird
我想要做的是创建一个名为new 的新表,其函数将table 中的所有值替换为lookUp 中的class 列。我自己尝试使用 lapply 函数,但收到以下警告。
new <- as.data.frame(lapply(table, function(x) {
gsub('.*', lookUp[match(x, lookUp$pet) ,2], x)}), stringsAsFactors = FALSE)
Warning messages:
1: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
argument 'replacement' has length > 1 and only the first element will be used
2: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
argument 'replacement' has length > 1 and only the first element will be used
3: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
argument 'replacement' has length > 1 and only the first element will be used
关于如何完成这项工作的任何想法?
【问题讨论】:
-
应该能够在行和列索引的两列上使用 cbind 来做到这一点。看到了吗?"["