문제

I need to replace the values of a column model in 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+"  
...

with those from a lookup table, which I imported as

> 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,
...

So that, for example, iPhone4,1 becomes iPhone4S. If a key is not present in the lookup table, I want to keep the original value of ddata$model, so for example the original Nexus 4 remains Nexus 4.

I tried with merge, but I don't know how to address the case where a key is missing:

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

The problem being that ddata2 has N/A for those values that don't have an entry in devices.

도움이 되었습니까?

해결책 2

I would use merge like above, then follow with:

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

Assuming that the 2nd column in devices is called model2.

다른 팁

Here's one approach using 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

Please note that your data was difficult to read in. Please use dput for odd data sets. Also I believe a similar question was asked recently but can't find it.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top