簡體   English   中英

從 R 中的另一個列表創建具有值條件的新列表(子列表)

[英]Create new list with condition of values (sublist) ​from another list in R

我的列表ListResiduals如下所示:

ListResiduals
    OptionA   Value
          1       4
          2       0
          3       7
    OptionB   Value
          1       2
          2       2
          3       9
    OptionC   Value
          1       3
          2       2
          3       1

我需要使用上一個Watchlist的名稱創建一個新列表監視列表,其中最后一個值例如 > 5,類似於:

Watchlist
  OptionA 
  OptionB

我有以下代碼,但它正在為我想要的創建一個毫無意義的矩陣。

    Watchlist <- sapply(ListResiduals, function(x) {
  (lapply(ListResiduals, tail, n = 1) > 5)
  })

嘗試這個:

unlist(lapply(ListResiduals,
       FUN = function(d) names(d)[1][tail(d, 1)$Value > 5]))

# "OptionA" "OptionB" 

tail(d, 1)$Value > 5檢查 Value 的最后一個Value是否> 5 然后我們 select 數據幀的名字( OptionAOptionBOptionC ),但僅在tail(d, 1)$Value > 5TRUE時保留該值

使用unlist將返回一個字符向量。

數據

ListResiduals <- 
  list(d1 = data.frame(OptionA = 1:3, Value = c(4, 0, 7)),
       d2 = data.frame(OptionB = 1:3, Value = c(2, 2, 9)),
       d3 = data.frame(OptionC = 1:3, Value = c(3, 2, 1)))

我想你可以試試

  • sapply + ifelse + na.omit
> na.omit(sapply(ListResiduals, function(x) ifelse(tail(x, 1)$Value > 5, names(x)[1], NA)))
[1] "OptionA" "OptionB"
  • Filter + sapply
> names(sapply(Filter(function(x) tail(x, 1)$Value > 5, ListResiduals), `[`, 1))
[1] "OptionA" "OptionB"

數據

> dput(ListResiduals)
list(structure(list(OptionA = 1:3, Value = c(4, 0, 7)), class = "data.frame", row.names = c(NA, 
-3L)), structure(list(OptionB = 1:3, Value = c(2, 2, 9)), class = "data.frame", row.names = c(NA,
-3L)), structure(list(OptionC = 1:3, Value = c(3, 2, 1)), class = "data.frame", row.names = c(NA,
-3L)))

您可以使用mapfilterdiscard

library(purrr)

map(ListResiduals, function(df) filter(df, last(Value) > 5)) %>% discard(~!nrow(.))

*使用@bouncyball 的ListResiduals (謝謝)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM