我需要替换model
中的列ddata
的值:
> 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)
问题是ddata2
对于devices
中没有条目的值, N / A 。
答案 0 :(得分: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
表示奇数数据集。我也相信最近有一个类似的问题但是找不到它。
答案 1 :(得分:1)
我会像上面一样使用merge
,然后按照:
ddata2 <- within( ddata2, model[ is.na(model2) ] <- model[ is.na(model2) ] )
假设设备中的第二列称为model2。