我在R中有一个如下所示的数据框:
library(dplyr)
group <- c(1,2,3,4,5,6)
num_click <- c(33000, 34000, 35000, 33500, 34500, 32900)
num_open <- c(999000, 999500, 1000000, 1000050, 985000, 999999)
df <- data.frame(group, num_click, num_open)
> df
# group num_click num_open
# 1 1 33000 999000
# 2 2 34000 999500
# 3 3 35000 1000000
# 4 4 33500 1000050
# 5 5 34500 985000
# 6 6 32900 999999
并且我已经编写了两个我想要应用于每一行的简单函数:
prop_test_ctr <- function(open, click){
return(prop.test(c(click, 34000), c(open, 999000), correct = FALSE)$p.value)
}
add_one_to_group <- function(group) {
return(group + 1)
}
prop_test_ctr
函数使用R&lt; stats包中的prop.test
函数来测试零假设,即几个组的比例相同; $p.value
是我在这里抓取的输出值,它对应于测试的p值。
add_one_to_group
函数是一个简单的函数,可以在df中为每个group_num添加1,这样我就可以验证rowwise()是否按预期工作。
当我尝试使用dyplr&#39; s results
将以下两个函数应用于每一行时,尝试构建新的rowwise()
数据框:
results <- df %>%
filter(group %in% c(1,2)) %>%
rowwise() %>%
mutate(p_value_ctr = prop_test_ctr(num_open,num_click),
group_plus_one = add_one_to_group(group))
它产生了这个输出:
results
# A tibble: 2 x 5
group num_click num_open p_value_ctr group_plus_one
* <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 33000 999000 0.00004201837 2
2 2 34000 999500 0.00004201837 3
p_value_ctr
列不正确 - 而不是计算每行的点击次数和打开次数的p值,而是计算组2,3和值组合的p值在prop_test_ctr
函数(34000和999000)中进行了硬编码。
add_one_to_group
函数使用rowwise()
按预期工作,但p_value_ctr
没有。 p_value_ctr
函数返回的p值实际上等于我运行的相同值:
prop.test(c(33000, 34000, 34000), c(999000, 999500, 999000))$p.value
看来,第2组和第3组的列clicks
和opens
的向量传递给函数而不是只有一行的预期列值(因此是rowwise()
的用户。
我知道还有其他方法可以实现这一点,但特别好奇我是否可以留在dpylr Universe中(而不是使用sapply()然后cbind那些结果原始df,例如)因为它看起来像这应该是rowwise()
的预期行为;我搞砸了一些东西。
感谢您的帮助!!
答案 0 :(得分:0)
看起来这个问题是由于plyr::mutate
函数被另一个同名的函数(很可能是dplyr
)所掩盖。重新启动干净的R会话修复了问题。
感谢@ user2738526的回复!看起来像变异 蒙面是个问题
由于dplyr::
函数名称的通用特性,我经常使用__repr__
定义其包,即使我已附加其包。