【发布时间】:2012-11-09 18:00:46
【问题描述】:
我有以下代码:
set.seed(47)
df <- data.frame(V1 = sample(letters[1:5], size = 10, replace = TRUE),
V2 = 101:110)
partial_key <- data.frame(V1 = letters[1:3], V2 = 1:3)
> df
V1 V2
1 e 101
2 b 102
3 d 103
4 e 104
5 c 105
6 d 106
7 b 107
8 c 108
9 c 109
10 e 110
> partial_key
V1 V2
1 a 1
2 b 2
3 c 3
我想将df 中V2 的值替换为partial_key 中与V1 列中匹配的相应值。不匹配的应该保持原样。
如果有一个完整的密钥,我会使用match,它会替换正确的值,但会将不匹配的值替换为NA。
df[, "V2"] <- partial_key[match(df$V1, partial_key$V1), "V2"]
## Replaces too much
我可以与%in% 一起破解一个解决方案,但有更好的方法吗?更直观、输入更少的东西?
df[df$V1 %in% partial_key$V1, "V2"] <-
partial_key[match(df$V1[df$V1 %in% partial_key$V1], partial_key$V1), "V2"]
## Works, but is there a better way?
> df
V1 V2
1 e 101
2 b 2
3 d 103
4 e 104
5 c 3
6 d 106
7 b 2
8 c 3
9 c 3
10 e 110
【问题讨论】:
标签: r replace dataframe pattern-matching