[英]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 數據幀的名字( OptionA
, OptionB
, OptionC
),但僅在tail(d, 1)$Value > 5
為TRUE
時保留該值
使用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)))
您可以使用map
、 filter
和discard
:
library(purrr)
map(ListResiduals, function(df) filter(df, last(Value) > 5)) %>% discard(~!nrow(.))
*使用@bouncyball 的ListResiduals
(謝謝)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.