【发布时间】:2020-12-01 10:36:04
【问题描述】:
我有一个数据框列表(测试),其中一列以“total_”(数字)开头,一列带有名称,一列保存年份。 我想查找在某一特定年份缺少总数但在下一个年份存在的案例(名称)。
我尝试了 str_detec(names) 和 contains(),尝试使用列索引来处理具有“总计”的列,尝试按年份过滤它,并尝试使用 is.na() 来查找缺失值,但我不能想办法。
lapply(test, function(x) filter(x[[x]][,1], is.na(.) & year == 1820))
map(test, ~filter(.x, sum(is.na(.x)), year == 1820))
map(test, ~filter_at(.x, sum(is.na(starts_with("total")))))
我只是想不通如何通过多个条件按索引进行过滤,然后使用 map 或 lapply。
呃,非常糟糕的例子:(我知道这只是相同数据帧的三倍,但它应该可以解决问题)。
year <- c(1820, 1821, 1822)
names <- c("A", "B", "C")
df <- data.frame(year, names)
df <- expand(df, year, names)
df$total_1 <- c(NA, 1,2, 1,2,3, NA, 2,3)
l <- list(df, df, df)
这就是我想要的
[[1]]
# A tibble: 9 x 3
year names total_1
<dbl> <chr> <dbl>
1 1820 A NA
7 1822 A NA
[[2]]
# A tibble: 9 x 3
year names total_1
<dbl> <chr> <dbl>
1 1820 A NA
7 1822 A NA
[[3]]
# A tibble: 9 x 3
year names total_1
<dbl> <chr> <dbl>
1 1820 A NA
7 1822 A NA
【问题讨论】:
-
你能分享一个可重现的例子和预期的输出吗?这样会更容易帮助你。