2016-03-28 606 views
0

我有一個列表向量。每個列表包含字段category 我需要刪除所有列表category == resource從列表中刪除具有特定字段的元素(r語言)

我試圖

for(i in 1:length(myList)){ 
    if(myList[[as.numeric(i)]]$data$category == "resource"){ 
    myList[[as.numeric(i)]]<-NULL 
    } 
} 

它是正確的嗎?

> dput(myList[1:2]) 
list(structure(list(data = structure(list(device = "iPad2,4", 
    os_version = "ios 7.1.2", connection_type = "wifi", category = "user", 
    platform = "ios", session_num = 2, ios_idfv = "E12AA218-4061-4BA1-AFA3-47FEE1511C2E", 
    client_ts = 1454926346, sdk_version = "unity 2.4.3", limited_ad_tracking = TRUE, 
    user_id = "436E8588-B2FA-411A-896C-5757E7A2A377", manufacturer = "apple", 
    jailbroken = TRUE, ios_idfa = "436E8588-B2FA-411A-896C-5757E7A2A377", 
    build = "1.0", session_id = "558910f2-7c2c-4280-84fc-2fef1a50d291", 
    v = 2, engine_version = "unity 4.6.9"), .Names = c("device", 
"os_version", "connection_type", "category", "platform", "session_num", 
"ios_idfv", "client_ts", "sdk_version", "limited_ad_tracking", 
"user_id", "manufacturer", "jailbroken", "ios_idfa", "build", 
"session_id", "v", "engine_version")), first_in_batch = TRUE, 
    country_code = "RO", arrival_ts = 1454926344, game_id = 24540, 
    ip = "93.168.249.0"), .Names = c("data", "first_in_batch", 
"country_code", "arrival_ts", "game_id", "ip")), structure(list(
    data = structure(list(os_version = "ios 9.2.1", engine_version = "unity 4.6.9", 
     category = "user", v = 2, ios_idfa = "F06962FE-FCE5-475F-8CC2-83FF1F89E573", 
     sdk_version = "unity 2.4.3", user_id = "F06962FE-FCE5-475F-8CC2-83FF1F89E573", 
     session_num = 2, platform = "ios", connection_type = "wifi", 
     manufacturer = "apple", client_ts = 1454925528, limited_ad_tracking = TRUE, 
     session_id = "3ab1fbbb-5103-4ad8-bf56-94f70fea94a7", 
     device = "iPad4,1", ios_idfv = "2C940E82-B074-4A15-B9A7-A5983759042F", 
     build = "1.0"), .Names = c("os_version", "engine_version", 
    "category", "v", "ios_idfa", "sdk_version", "user_id", "session_num", 
    "platform", "connection_type", "manufacturer", "client_ts", 
    "limited_ad_tracking", "session_id", "device", "ios_idfv", 
    "build")), first_in_batch = TRUE, country_code = "AU", arrival_ts = 1454925528, 
    game_id = 24540, ip = "110.175.52.0"), .Names = c("data", 
"first_in_batch", "country_code", "arrival_ts", "game_id", "ip" 
))) 
+2

嘗試'lapply(myList中,setdiff, 「資源」)'請出示小重複性例。我們不知道'field'是什麼意思。你有'data.frame'或'matrix'或'vector'作爲每個'list'元素嗎? – akrun

+0

你可以發佈dput(myList [1:2])的輸出輸出和期望的輸出,以便其他人測試它更容易嗎? – akrun

+0

@arkun我需要除列表以外的所有向量myList $ data $ category ==「resource」 – Smasell

回答

1

你可以使用rlist包:

library(rlist) 
filtered_list <- list.exclude(myList, data$category == "ressource") 
0

我們可以使用Filterbase R

Filter(function(x) x$data$category!="resource", myList)