【发布时间】:2021-05-13 06:46:58
【问题描述】:
我正在使用一个数据集,其中我需要对一系列列进行透视,但是我应该过滤掉每个组中所有为 NULL 的记录。 下面是一个例子
library(tidyverse)
courses_col = c("Science", "Mathematic", "French", "Biology")
mapping <- tibble(
courses = courses_col,
level = c("aaaa", "aaaa", "bbbb", "cccc")
)
score <- tibble(
name = c("Bob", "Simon", "Albert", "Marc"),
French = c("A", "A", "B", "C"),
Science = c("A", "B", NA, "C"),
Mathematic = c("A", "A", NA, NA),
Biology = c("A", "B", NA, "B"),
score = c(12, 14, 15, 12)
)
score %>%
select(name, Science, Mathematic, score) %>%
filter(!is.na(Science) & !is.na(Mathematic)) %>%
summarise(ratio = median(score))
score %>%
pivot_longer(
cols = courses_col,
names_to = "courses",
values_to = "grade"
) %>%
left_join(mapping, by = "courses") %>%
filter(!is.na(grade)) %>%
summarise(
ratio = median(score)
)
对于第一个代码,我得到与课程“科学”和“数学”相对应的组“aaaa”的中值 13 - 请注意,如果两列都是 NA,我将手动过滤 NA 值。
但是,当我旋转数据时,我失去了为组应用过滤器的可能性。第二个示例产生的中位数为 12,因为它丢弃了所有 NA。
我应该如何解决这个问题?
【问题讨论】:
-
我不清楚你想要的输出应该是什么样子。你能提供吗?