这个问题可能有一个简单的答案,所以我提前道歉。我想使用 R 重新编码 v2、df1 中的值,并使它们看起来像 v2、df2 中的数据值。是否可以使用 v2、df1 中包含“Y”的值的部分匹配并将这些值重新编码为 v2、df2 中的“Yr”?
> 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
>
这个问题可能有一个简单的答案,所以我提前道歉。我想使用 R 重新编码 v2、df1 中的值,并使它们看起来像 v2、df2 中的数据值。是否可以使用 v2、df1 中包含“Y”的值的部分匹配并将这些值重新编码为 v2、df2 中的“Yr”?
> 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
>
您可以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
如果您的数据是一个因素,您可以先转换为字符,然后使用上面的代码。
正则表达式的另一种用法。
df1$v2 <- gsub("Y.*","Yr", df1$v2)
我认为这对你有用,但根据你有多少组和数据框的大小,可能会有更好的方法:
df1$v2 <- ifelse(grepl("Y", df1$v2), "Yr", df1$v2)