2010-05-12 108 views
2

我遇到了我认为是基本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') 

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

我觉得我错过了一些基本的东西。有人可以重定向我,或者就我上面写的代码提供建议吗?非常感谢

回答

9

你想要做的是通过水平改变值。级别使您可以访问某个因素中的标签。以某个因子调用它会显示标签,并且指定给levels函数会覆盖该因子的标签。

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

试试这个:

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

-mcpeterson

+0

非常感谢!我非常感谢。 – rhh 2010-05-13 01:03:12

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 $获奖者是一个特征向量,这个工程:

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

如果B $得主是一个因素,那么“汤姆有限责任公司”必须是其中的一个级别,以便您将其插入到的因素。如果B $得主是一个因素,我可能会再这样做:

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

它只是告诉[R是赢家的可能值(即,B $优胜者的水平),应及时更换。这里的一些高级R用户建议将你的stringsAsFactors选项设置为FALSE ...,我使用R越多,我越同意。操纵纯字符串向量然后根据需要将其弹入一个因子会容易得多。

+1

借用设置stringsAsFactors。 – mcpeterson 2010-05-12 22:42:21

+0

谢谢你的帮助。我将mcPeterson标记为答案,因为它直接是我所需要的,尽管我通过阅读你的解释了解了一大堆。 “stringsAsFactors = FALSE”的建议将为我节省大量的时间。再次感谢您的帮助 – rhh 2010-05-13 01:04:14

相关问题