我有:
> select(dff_all, id, device_idom, device_model )[1:9,]
id device_idom device_model
1 8989419 phone iPhone5,2 (iPhone 5)
2 6411543 phone iPhone4,1 (iPhone 4S)
3 12521771 <NA> XT1033 motorola
4 4507411 <NA> <NA>
5 13474390 <NA> GT-I9300 samsung
6 11049297 <NA> GT-I9300I samsung
7 14835142 <NA> <NA>
8 10668268 phone iPhone6,1 (iPhone 5s (GSM))
9 6991492 <NA> XT1032 motorola
我希望它是:
> select(dff_all, id, device_idom, device_model )[6:9,]
6 11049297 <NA> GT-I9300I samsung
7 14835142 <NA> <NA>
8 10668268 phone iPhone6,1 (iPhone 5s (GSM))
9 6991492 android XT1032 motorola
如果device_idom = android
和device_idom = NA
,我想提出device_model != NA
。
我试过了:
device_idom <- ifelse(
dff_all$device_idom !== (pad | phone)
AND
is.na(dff_all$device_model) == FALSE,
android,
dff_all$device_idom)
答案 0 :(得分:3)
问题可能在于您的NA被定义为<NA>
而不是NA
,这可能意味着R
无法将其识别为{ {1}} - 值。您也可以使用NA
/ is.na
。
=="<NA>"
此:
!="<NA>"
应该给你想要的结果:
dff_all$device_idom <- with(dff_all, ifelse(device_idom=="<NA>" &
device_model!="<NA>", "android", as.character(device_idom)))
您还可以将> dff_all
id device_idom device_model
1 8989419 phone iPhone5,2(iPhone5)
2 6411543 phone iPhone4,1(iPhone4S)
3 12521771 android XT1033motorola
4 4507411 <NA> <NA>
5 13474390 android GT-I9300samsung
6 11049297 android GT-I9300Isamsung
7 14835142 <NA> <NA>
8 10668268 phone iPhone6,1(iPhone5s(GSM))
9 6991492 android XT1032motorola
替换为<NA>
,如下所示:
NA
或与:
dff_all[dff_all=="<NA>"] <- NA
之后,您应该可以再次使用is.na(dff_all) <- dff_all=="<NA>"
。
使用@ {DavidArenburg建议的is.na
执行此操作,您可以使用类似的逻辑:
data.table
注意:我删除了library(data.table)
setDT(dff_all)[device_idom=="<NA>" & device_model!="<NA>", device_idom := "android"]
列中的空格,以便将文本读入数据框。 (在您的问题中包含device_model
的输出会更好,这会让其他人更方便地帮助您)