基于R中的部分匹配重新编码变量

时间:2012-04-14 03:17:25

标签: r

这个问题可能有一个简单的答案,所以我提前道歉。我想用R来重新编码v2,df1中的值,并使它们看起来像v2,df2中的数据值。是否可以使用v2,df1中包含的值的部分匹配,比如'Y'并将这些值重新编码为'Yr',如v2,df2?

> df1
  v1   v2
1  1 Yr01
2  2 Yr02
3  3 Yr03
4  4 Yr04
5  5 Yr05

> df2
  v1 v2
1  1 Yr
2  2 Yr
3  3 Yr
4  4 Yr
5  5 Yr
> 

3 个答案:

答案 0 :(得分:5)

您可以使用grepl()生成一个布尔值向量,具体取决于您定义的正则表达式。有关正则表达式简单介绍的详细信息,请参阅此处:http://www.regular-expressions.info/tutorial.html

df1 <- read.table(text = "
  v1   v2
  1  1 Yr01
  2  2 Yr02
  3  3 Yr03
  4  4 Yr04
  5  5 Yr05", 
  header = TRUE, stringsAsFactors = FALSE)

df1[grepl("Y", df1$v2), "v2"] <- "Yr"
> df1

  v1 v2
1  1 Yr
2  2 Yr
3  3 Yr
4  4 Yr
5  5 Yr

如果您的数据是一个因素,您可以先转换为字符,然后使用上面的代码。

答案 1 :(得分:0)

我认为这对您有用,但可能有更好的方法,具体取决于您拥有的群组数量和数据框的大小:

df1$v2 <- ifelse(grepl("Y", df1$v2), "Yr", df1$v2)

答案 2 :(得分:0)

正则表达式的另一种用法。

df1$v2 <- gsub("Y.*","Yr", df1$v2)