R 从列表中的单个数据帧中删除NA行
从列表中的单个数据帧中删除NA行 我想在管道内完成这项工作R 从列表中的单个数据帧中删除NA行,r,dplyr,R,Dplyr,从列表中的单个数据帧中删除NA行 我想在管道内完成这项工作 #Sample data: l <- list(a=c("X", "Y", "Z"), b = data.frame(a=c("A", "B", "C", NA), b=c("R", "G", "B", NA)), c = data.
#Sample data:
l <- list(a=c("X", "Y", "Z"),
b = data.frame(a=c("A", "B", "C", NA), b=c("R", "G", "B", NA)),
c = data.frame(header=c(1,2,3), value=c(0, 10, 15)))
如果您特别想对名为“b”的列表成员采取行动,您可以使用
map\u If
:
l %>%
map_if(names(.) == "b", na.omit)
lappy(l,na.omit)
将从列表的任何元素中删除na行
lapply(l, na.omit)
$a
[1] "X" "Y" "Z"
$b
a b
1 A R
2 B G
3 C B
$c
header value
1 1 0
2 2 10
3 3 15
如果确实要对任何元素使用map
和管道:
l %>%
map(., na.omit)
Filter()没有list方法(因此错误:“error in UseMethod(“Filter_”):没有适用于“Filter_”的方法应用于类“list”的对象)
你可以把lappy放在这样的管子上
l%>%lappy(不适用)
一个非管道的方式是
l$b如果列表中的元素是数据帧,则可以删除NA
lapply(l, function(x) if(inherits(x, 'data.frame')) na.omit(x) else x)
与地图相同
:
purrr::map(l, ~if(inherits(.x, 'data.frame')) na.omit(.x) else .x)
啊,如果这是我想要的。谢谢如果我还想过滤掉c中header==2的行呢。这不起作用:map_if(name(.)=“c”,filter(header!=“2”))更复杂一点:l%>%map_if(name(.)=“c”,“filter(.x,header!=2))
谢谢@neilfws。你是个巫师
purrr::map(l, ~if(inherits(.x, 'data.frame')) na.omit(.x) else .x)