我有一个数据框,由下面的示例给出。
Counts <- data.frame(ID = c(1, 2, 3, 4), "2005" = c(0, 1, 3, 2), "2006" = c(1, 0, 2, 1), "2007" = c(3, 1, 6, 4), "2008" = c(2, 1, 11, 3), "2009" = c(6, 0 , 8, 4), ECP = c(2008, 2007, 2007, 2006))
ECP代表最早的协作点,并指定一年。其余数据是每年特定公司ID的专利数量。
我想做一个t.test来比较ECP(协作年)之前和之后ID的“每年平均专利数”。我知道我需要进行配对样本t检验,因为样本是同一组公司。我有一个手动方式来执行t.test,我根据ECP分割数据帧,但由于数据帧有点大,有950个ID和13年(变量),我想要一个更好的解决方案。
欢迎任何其他分析数据的想法。 亲切的问候
答案 0 :(得分:0)
如果我正确理解您的问题,您可以尝试
# data
ID <- c(1, 2, 3, 4)
a1 <- c(0, 1, 3, 2)
a2 <- c(1, 0, 2, 1)
a3 <- c(3, 1, 6, 4)
a4 <- c(2, 1, 11, 3)
a5 <- c(6, 0 , 8, 4)
ECP <- c(2008, 2007, 2007, 2006)
Counts <- data.frame(ID, "2005"=a1, "2006"=a2, "2007"=a3, "2008"=a4, "2009"=a5, ECP)
library(tidyverse)
Counts %>%
gather(k, v, -ID, -ECP) %>%
mutate(k=as.numeric(gsub("X", "", k))) %>%
mutate(BA=factor(ifelse(k < ECP, "before", "after"), levels = c("before", "after"))) %>%
ggplot(aes(BA, v)) +
geom_boxplot(outlier.size = 0) +
ggbeeswarm::geom_beeswarm() +
ggsignif::geom_signif(comparisons = list(c("before", "after")), test = "t.test")
还是这个?
Counts %>%
gather(k, v, -ID, -ECP) %>%
mutate(k=as.numeric(gsub("X", "", k))) %>%
mutate(BA=factor(ifelse(k < ECP, "before", "after"), levels = c("before", "after"))) %>%
ggplot(aes(factor(k), v, fill = BA)) +
geom_boxplot(outlier.size = 0) +
geom_point(position = position_dodge(width = 0.8)) +
stat_compare_means(aes(group=BA))
但正如您在第二张图片中看到的那样,没有足够的数据来计算t.test。