【发布时间】:2016-02-16 18:00:28
【问题描述】:
我有一个看起来像这样的数据框
> 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.) 将 df 中的数字替换为 a 中对应的字符值。 (2.) 按行而不是按列查找重复项。现在允许 NA 留下来。
这是示例数据:
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]])
}
}
它可以工作,但在我的 100 万 * 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。我希望很清楚我想做什么,并且有人可以为我提供解决方案。
【问题讨论】:
标签: r