如何用数据框中的撇号替换值?

时间:2015-04-17 04:40:36

标签: r dataframe

我是R的新手,只用了几个月就使用了这个软件。

在数据框中,我有一些带撇号的值,我想将其更改为另一个单词。

我试过了:

data$HomeTeam[data$HomeTeam=="M'Gladbach"]<-"Gladbach"

但我收到一条警告信息:

In [<-.factor(*tmp*, dta$HomeTeam == "M'Gladbach", value = c(2L, : invalid factor level, NA generated

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以尝试sub

data$HomeTeam <- sub("^[^']*'", "", data$HomeTeam)
data$HomeTeam
#[1] "Gladbach"  "Sonja"     "Henderson" "Marshall" 

sub输出将是'character'类。如果我们需要保留“因子”类,您可以在“HomeTeam”的级别上尝试sub并将输出分配回“级别”(如@thelatemail的评论中所示)

levels(data$HomeTeam) <- sub("^[^']*'","",levels(data$HomeTeam))

如果您只想将帖子中显示的“M'Gladbach”替换为“Gladbach”,最好将“HomeTeam”列从factor转换为character类。最好使用stringsAsFactors=FALSEread.table/read.csv中的data.frame选项阅读数据集。

由于“HomeTeam”列已经是一个因素,您可以使用as.character(来自@ rawr的评论)

 data$HomeTeam <- as.character(data$HomeTeam)
 data$HomeTeam[data$HomeTeam=="M'Gladbach"]<-"Gladbach"

数据

set.seed(22)
data <- data.frame(HomeTeam= c("M'Gladbach", "S'Sonja", 
             "HR'Henderson", "Marshall"), Value=rnorm(4))