【发布时间】:2019-09-26 18:29:28
【问题描述】:
我正在尝试对长格式数据进行 Wilcoxon 测试。我想使用dplyr::group_by() 来指定我想要对其进行测试的子集。
最终结果将是一个新列,其中将 Wilcoxon 检验的 p 值附加到原始数据框中。我见过的所有技术都需要总结数据框。我不想总结数据框。
请查看重新格式化iris 数据集以模仿我的数据的示例,最后是我执行任务的尝试。
我已经接近了,但我想保留 Wilcoxon 测试之前的所有原始数据。
# Reformatting Iris to mimic my data.
long_format <- iris %>%
gather(key = "attribute", value = "measurement", -Species) %>%
mutate(descriptor =
case_when(
str_extract(attribute, pattern = "\\.(.*)") == ".Width" ~ "Width",
str_extract(attribute, pattern = "\\.(.*)") == ".Length" ~ "Length")) %>%
mutate(Feature =
case_when(
str_extract(attribute, pattern = "^(.*?)\\.") == "Sepal." ~ "Sepal",
str_extract(attribute, pattern = "^(.*?)\\.") == "Petal." ~ "Petal"))
# Removing no longer necessary column.
cleaned_up <- long_format %>% select(-attribute)
# Attempt using do(), but I lose important info like "measurement"
cleaned_up %>%
group_by(Species, Feature) %>%
do(w = wilcox.test(measurement~descriptor, data=., paired=FALSE)) %>%
mutate(Wilcox = w$p.value)
# This is an attempt with the dplyr experimental group_map function. If only I could just make this a new column appended to the original df in one step.
cleaned_up %>%
group_by(Species, Feature) %>%
group_map(~ wilcox.test(measurement~descriptor, data=., paired=FALSE)$p.value)
感谢您的帮助。
【问题讨论】:
-
您只需将
group_map替换为mutate并将~替换为p = -
@IceCreamToucan 有一个危险,因为它不会与模型保持分组结构
cleaned_up %>% group_by(Species, Feature) %>% summarise(pval = wilcox.test(measurement~descriptor, data=., paired=FALSE)$p.value) -
啊,你是对的。如果使用我上面提出的修改,您还需要删除
data参数(不需要,因为变量已经在范围内)
标签: r dplyr statistics