r - 如何将数据框划分为新的数据框(如新数据1、数据2、数据3 ..等等),以便我可以分析它们中的每一个(如T检验)
问题描述
我刚刚开始学习 R 进行数据分析。这是我的问题。
我想分析不同物种中雄性和雌性之间的体重(BW)差异。(例如,在Sorex gracilliums中,雄性和雌性体重差异显着只是一个例子,我不知道答案。:))起初我想也许我可以先将它们按物种分成几组。(这确实可以在 Excel 中完成,但我的文件太多,我认为也许 R 更好)然后我可以使用一些简单的代码来测试性别差异。但我不知道如何划分它们,如何制作新的数据框..我尝试使用 group_split。它确实拆分了数据,但只是很多 tribble。如图片所示
我应该怎么办?或者也许有更好的方法来测试差异?
我是外国人,所以可能有很多语法错误..但如果你能帮助我,我将不胜感激!
解决方案
假设您的数据位于名为 df 的 data.frame 中,其中包含 NO、SPECIES、SEX、BW 列:
set.seed(100)
df = data.frame(NO=1:100,
SPECIES=sample(LETTERS[1:4],100,replace=TRUE),
SEX=sample(c("M","F"),100,replace=TRUE),
BW = rnorm(100,80,2)
)
我们让 Species D 产生效果:
df$BW[df$SPECIES=="D" & df$SEX=="M"] = df$BW[df$SPECIES=="D" & df$SEX=="M"] + 5
如果我们想在一个数据帧上做,比如 Species A,我们做
dat = subset(df,SPECIES=="A")
t.test(BW ~ SEX,data=dat)
你会得到相关的统计数据等等。为了对所有物种系统地执行此操作,我们可以使用 broom、dplyr:
library(dplyr)
library(broom)
df %>% group_by(SPECIES) %>% do(tidy(t.test(BW ~ SEX,data=.)))
# A tibble: 4 x 11
# Groups: SPECIES [4]
SPECIES estimate estimate1 estimate2 statistic p.value parameter conf.low
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 0.883 80.4 79.6 0.936 3.65e-1 14.2 -1.14
2 B 0.259 80.2 79.9 0.377 7.12e-1 14.1 -1.21
3 C 0.170 80.1 79.9 0.359 7.23e-1 25.3 -0.807
4 D -5.55 79.7 85.2 -7.71 1.29e-7 21.4 -7.05
如果您不想安装任何软件包,这将为您提供所有测试结果:
by(df, df$SPECIES, function(x)t.test(BW ~ SEX,data=x))
并将它们组合成一个data.frame:
func = function(x){
Nu=t.test(BW ~ SEX,data=x);
data.frame(estimate_1=Nu$estimate[1],estimate_2=Nu$estimate[2],p=Nu$p.value)}
do.call(rbind,by(df, df$SPECIES,func))
推荐阅读
- haskell - 功能依赖和奇怪的刚性类型变量错误
- azure - Azure DevOps Deploy WebApp 任务中的应用设置和配置设置有什么区别?
- python - 使用 pyodbc 连接到在 docker 上运行的 Postgres
- azure - 模型训练反复失败
- php - PHP PDO 准备好的语句未执行
- angular-cli - 在 Angular CLI 项目结构中创建 ionic 4 应用程序
- javascript - 如何在innerHTML onclick事件中动态传递字符串参数
- actionscript-2 - 数组返回未定义(动作脚本 2)
- c# - SqlConnection 建立后的 SqlTransaction vs TransactionScope
- sql - postgres 在“主”表上加入“其他”表,该表有 2 个对“其他”表的引用