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

R 如何改变数据帧的行-用一个值替换另一个值,r,R,我认为这是一项基本的R任务,但我遇到了麻烦 这是我的名为“b”的示例数据帧 Winner Color Size Tom Yellow Med Jerry Yellow Lar Jane Blue Med 其中“获胜者”列中的项目是因子 我试图将数据框中的“Tom”改为“Tom LLC”,但我无法完成 以下是我尝试过的: 简单方法: b$winner[b$winner=='Tom']=as.factor('Tom LLC') 但由于“因子级别无效,生成NAs”而失败 接下来,我尝试了一条更高级的

我认为这是一项基本的R任务,但我遇到了麻烦

这是我的名为“b”的示例数据帧

Winner Color Size
Tom Yellow Med
Jerry Yellow Lar
Jane Blue Med
其中“获胜者”列中的项目是因子

我试图将数据框中的“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')
但由于“列表到数据帧(res,attr(.data,split_labels))中的错误”而失败: 结果不是等长的”


我觉得我错过了一些基本的东西。有人能给我重定向或者对我上面写的代码提出建议吗?非常感谢

您要做的是通过级别更改值。使用“标高”可以访问系数中的标签。在因子上调用它将显示标签,而指定给levels函数将覆盖因子的标签

一旦开始使用levels函数,就可以根据需要更改值。我认为gsub可能是最简单的

试试这个:

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

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

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")
如果b$Winner是一个因子,那么“Tom LLC”必须是其中一个级别,以便您将其插入因子中。如果b$Winner是一个因素,我可能会这样做:

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

levels(b$Winner)在设置stringsAsFactors时被附议。感谢您的帮助。我把麦克佩特森的答案标了出来,因为这正是我需要的,尽管我从你的解释中学到了很多。“stringsAsFactors=FALSE”的建议将为我节省大量时间。再次感谢您的帮助非常感谢!我非常感激。
levels(b$Winner) <- c("Tom LLC", "Jerry", "Jane")