-1

我需要替换以下列的modelddata

> unique(ddata$model)
[1] "GT-I9001"    "iPhone5,2"    "iPhone3,1"                        
[4] "iPhone4,1"   "GT-I9300"     "Nexus 4"                         
[7] "iPhone2,1"   "VS840 4G"     "HTC One X+"  
...

与查找表中的那些,我导入为

> devices
...
15 iPhone1,1         iPhone 2G,
16 iPhone1,2         iPhone 3G,
17 iPhone2,1         iPhone 3GS,
18 iPhone3,1         iPhone 4,
19 iPhone3,2         iPhone 4,
20 iPhone3,3         iPhone 4,
21 iPhone4,1         iPhone 4S,
22 iPhone5,1         iPhone 5,
23 iPhone5,2         iPhone 5,
...

因此,例如,iPhone4,1变为iPhone4S。如果查找表中不存在键,我想保留 的原始值ddata$model,例如原始值Nexus 4仍然存在Nexus 4

我试过了merge,但我不知道如何解决缺少密钥的情况:

ddata2 = merge(ddata,devices,by="model", all.x=T)

问题是对于那些没有条目的值ddata2N/Adevices

4

2 回答 2

2

这是使用qdap的一种方法:

## key <- readLines(n=9)
## iPhone1,1         iPhone 2G,
## iPhone1,2         iPhone 3G,
## iPhone2,1         iPhone 3GS,
## iPhone3,1         iPhone 4,
## iPhone3,2         iPhone 4,
## iPhone3,3         iPhone 4,
## iPhone4,1         iPhone 4S,
## iPhone5,1         iPhone 5,
## iPhone5,2         iPhone 5,
## 
## library(qdap)
## key <- colSplit(key, "         ")
## 
## ddata <- data.frame(model = c("GT-I9001",    "iPhone5,2",    "iPhone3,1",                        
##     "iPhone4,1",   "GT-I9300",     "Nexus 4",                         
##     "iPhone2,1",   "VS840 4G",     "HTC One X+"))

library(qdap)

ddata$model <- as.character(ddata$model)

ddata$model <- lookup(ddata$model, key, missing =NULL) ## OR
ddata$model <- ddata$model %l+% key

请注意,您的数据难以读取。请dput用于奇数数据集。我也相信最近有人问过类似的问题,但找不到。

于 2013-07-01T19:54:53.283 回答
1

我会merge像上面那样使用,然后跟随:

ddata2 <- within( ddata2, model[ is.na(model2) ] <- model[ is.na(model2) ] )

假设设备中的第 2 列称为模型 2。

于 2013-07-01T20:55:15.230 回答