Ifelse根据逻辑标准将新值设置为旧变量

时间:2015-08-10 09:12:28

标签: r if-statement

我有:

> 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 = androiddevice_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)

1 个答案:

答案 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的输出会更好,这会让其他人更方便地帮助您)