我的数据框看起来像这样
> df
x y z
[1,] NA 6 11
[2,] 1 7 12
[3,] 2 8 13
[4,] 3 9 14
[5,] 4 10 15
[6,] 5 NA NA
一个字符向量看起来像这样
> a
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "g" "m" "n" "o"
我想要实现的是两项任务。 (1.)用d中的相应字符值替换df中的数字。 (2.)以行方式而不是按列方式查找重复项。 NAs现在可以留下来。
以下是示例数据:
x<-c(NA,1:5)
y<-c(6:10,NA)
z<-c(11:15,NA)
df<-cbind(x,y,z)
a<-c("a","b","c","d","e","f","g","h","i","j","k","g","m","n","o")
(1.)的一个相当简单且非常缓慢的解决方案是:
new<-data.frame()
for(i in 1:ncol(df)){
for(j in 1:nrow(df)){
new[j,i] <- as.character(a[df[j,i]])
}
}
它可以工作,但永远在我的1mil * 64数据集上。似乎有(2.)already here on stackoverflow的解决方案,但我不知道如何将它应用于我的问题。最终结果应如下所示:
> new
V1 V2 V3
1 <NA> f k
2 a g g
3 b h m
4 c i n
5 d j o
6 e <NA> <NA>
但是第2行中的第二个g需要被NA替换。我希望很清楚我想做什么,有人为我找到解决方案。
答案 0 :(得分:2)
我们可以使用
r1 <- `dim<-`(a[df], dim(df))
如果我们需要用NA
替换重复项t(apply(r1, 1, function(x) replace(x, duplicated(x), NA)))