r - 如何通过分类变量过滤 R 中的 data.frame?

标签 r statistics dataframe

刚学R。

给定一个 data.frame在 R 中有两列,一列是数字列,一列是分类列,如何提取 data.frame 的一部分用途?

str(ex0331)
'data.frame':   36 obs. of  2 variables:
$ Iron      : num  0.71 1.66 2.01 2.16 2.42 ...
$ Supplement: Factor w/ 2 levels "Fe3","Fe4": 1 1 1 1 1 1 1 1 1 1 ...

基本上,我需要能够分别对这两个因素进行操作;即我需要能够通过 Supplement 单独确定铁保留率的长度/平均值/标准差/等。类型( Fe3Fe4 )。

实现这一目标的最简单方法是什么?

我知道 by()命令。例如,以下内容获得了我需要的一些内容:
by(ex0331, ex0331$Supplement, summary)
ex0331$Supplement: Fe3
     Iron       Supplement
Min.   :0.710   Fe3:18    
1st Qu.:2.420   Fe4: 0    
Median :3.475             
Mean   :3.699             
3rd Qu.:4.472             
Max.   :8.240             
------------------------------------------------------------ 
ex0331$Supplement: Fe4
     Iron        Supplement
Min.   : 2.200   Fe3: 0    
1st Qu.: 3.892   Fe4:18    
Median : 5.750             
Mean   : 5.937             
3rd Qu.: 6.970             
Max.   :12.450      

但我需要更多的灵活性。我需要申请 axis命令,例如,或 log()按组运行。我相信有一种简单的方法可以做到这一点;我只是没看到。所有的data.frame我见过的操作文档是针对数字变量而不是分类变量的。

最佳答案

我建议使用 ddply来自 plyr 的函数包,详细文档在线:

> require(plyr)
> ddply( ex0331, .(Supplement), summarise, 
         mean = mean(Iron), 
         sd = sd(Iron), 
         len = length(Iron))

  Supplement       mean        sd len
1        Fe3 -0.3749169 0.2827360   4
2        Fe4  0.1953116 0.7128129   6

更新 .
添加 LogIron每个条目是 log() 的列的Iron值,您只需使用 transform :
> transform(ex0331, LogIron = log(Iron))

         Iron Supplement     LogIron
1  0.07185141        Fe3 -2.63315498
2  1.10367297        Fe3  0.09864368
3  0.48592428        Fe3 -0.72170246
4  0.20286918        Fe3 -1.59519393
5  0.80830682        Fe4 -0.21281357

或者,要创建“每个补充剂对数铁值的平均值”的摘要,您可以执行以下操作:
> ddply( ex0331, .(Supplement), summarise, meanLog = mean(log(Iron)))
  Supplement    meanLog
1        Fe3 -1.0062304
2        Fe4  0.2791507

关于r - 如何通过分类变量过滤 R 中的 data.frame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052621/

相关文章:

r - 从计数数据生成数据框

r - 在R中使用foreach将内存使用量加倍

python - 如何从 curve_fit 获得置信区间

python - 如何创建一个函数来接受 pandas 数据框并删除包含特定值的行?

r - GmailR 在电子邮件正文中发送 data.frame

list - 如何在序言中找到列表的模式?

python - 如何使用 scipy 执行 Levene 检验

r - R 中的嵌套 ifelse 非常接近工作

r - 根据来自不同数据帧的 2 个键定义数据帧中列的值

r - 如何使用 dplyr 分组进行统计测试,然后用扫帚制作 tibble