如何改变数据帧的行 - 用另一个值替换一个值

时间:2010-05-12 21:57:49

标签: r

我遇到了一个基本的R任务问题。

这是我的名为'b'

的示例数据框
Winner Color Size
Tom Yellow Med
Jerry Yellow Lar
Jane Blue Med

Winner列中的项目是因素。

我正在尝试将数据框中的“Tom”更改为“Tom LLC”,但我无法完成。

这是我试过的:

简单方法: b$winner[b$winner=='Tom'] = as.factor('Tom LLC')

但是因为“无效因子水平,NAs生成”

失败了

接下来我尝试了更高级的路线:

name_reset = function (x, y, z) {
if (x$winner == y) {x$winner = z}
}

b = adply(b,1,name_reset,'Tom','Tom LLC')

但是失败了“list_to_dataframe中的错误(res,attr(.data,”split_labels“)):   结果不等长“

我觉得我遗漏了一些基本的东西。有人可以重定向我或提供有关我上面编写的代码的建议吗?非常感谢你

2 个答案:

答案 0 :(得分:9)

您要做的是通过级别更改值。级别使您可以访问因子中的标签。在因子上调用它会显示标签,并且分配到级别功能会覆盖因子的标签。

开始使用关卡功能后,您可以根据需要更改值。我认为gsub可能是最简单的。

试试这个:

levels(b$Winner) <- gsub("Tom", "Tom LLC", levels(b$Winner))

-mcpeterson

答案 1 :(得分:3)

我制作了您的数据框,然后使用dput()将其制作成一种格式,让人们可以轻松地从网络上复制/粘贴它:

b <- structure(list(Winner = c("Tom", "Jerry", "Jane"), Color = c("Yellow", 
"Yellow", "Blue"), Size = c("Med", "Lar", "Med")), .Names = c("Winner", 
"Color", "Size"), row.names = c(NA, -3L), class = "data.frame")

我不确定代码中的as.factor()究竟是什么意思。 as.factor将值的向量转换为因子 - 它对单个值实际上没有任何意义。如果b $ Winner是一个字符向量,则可以:

b$Winner[dat$Winner %in% "Tom"] <- "Tom LLC"

如果b $ Winner是一个因素,那么“Tom LLC”必须是其中一个级别才能将其插入到因子中。如果b $ Winner是一个因素,我可能会这样做:

levels(b$Winner) <- c("Tom LLC", "Jerry", "Jane")

这只是告诉R应该替换Winner的可能值(即b $ Winner的级别)。一些高级R用户建议将stringsAsFactors选项设置为FALSE ...而且我使用R越多,我就越同意。操作普通的字符串向量然后根据需要将其弹出到一个因子中要容易得多。