【发布时间】:2020-01-20 14:32:05
【问题描述】:
我正在尝试应用基于 tidyverse 的方法,或者至少是一个 tidy 解决方案,以便在数据帧中的因子级别上应用自定义函数。
考虑以下测试数据集:
df <- tibble(LINE=rep(c(1,2),each=6), FOUND=c(1,1,1,0,1,1,0,0,1,0,0,1))
# LINE FOUND
# <dbl> <dbl>
# 1 1 1
# 2 1 1
# 3 1 1
# 4 1 0
# 5 1 1
# 6 1 1
# 7 2 0
# 8 2 0
# 9 2 1
#10 2 0
#11 2 0
#12 2 1
例如,我想知道按 LINE 因子级别找到的结果(例如 FOUND==1)的比例。现在,我正在使用以下代码,但我真的在尝试更清洁。
# This is the function to calculate the proportion "found"
get_prop <- function (data) {
tot <- data %>% nrow()
found <- data %>% dplyr::filter(FOUND==1) %>% nrow
found / tot
}
# This is the code to generate the expected result
lines <- df$LINE %>% unique %>% sort
v_line <- vector()
v_prop <- vector()
for (i in 1:length(lines)) {
tot <- df %>% dplyr::filter(LINE==lines[i])
v_line[i] <- lines[i]
v_prop[i] <- get_prop(tot)
}
df_line = data.frame(LINE = v_line, CALL = v_prop)
我希望以下方法可以工作,但它不会,因为它返回每个级别的结果,但数值解决方案是整个数据集的结果,而不是特定于级别的:
df %>% dplyr::group_by(LINE) %>% dplyr::summarise(get_prop(.))
编辑:请注意,我正在寻找的解决方案是在数据框中的某个因子的级别上应用 自定义函数。它不一定是特定值出现的次数或比例,如示例所示。
EDIT 2:也就是说,我正在寻找一种利用上述get_prop 函数的解决方案。这并不是因为它是解决这个特定问题的最佳方法,而是因为它更具有普遍性
【问题讨论】:
标签: r