刚学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
单独确定铁保留率的长度/平均值/标准差/等。类型( Fe3
或 Fe4
)。实现这一目标的最简单方法是什么?
我知道
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/