分箱列并从R中的其他列获取相应的值

时间:2012-03-24 21:41:47

标签: r hmisc

我在数据框中有两列配对值,我想使用cut2中的Hmisc package函数将数据分成一列,以便至少有25个数据点每个垃圾箱。但是我需要来自另一列的相应值。使用R有没有方便的方法?我必须将B列加入。

A           B
-10.834510  1.680173
11.012966  1.866603
-16.491415  1.868667
-14.485036  1.900002
2.629104  1.960929
-3.597291  2.005348
.........

1 个答案:

答案 0 :(得分:0)

想要“其他列的相应值”并不清楚你的意思。第一部分很容易使用g(#of groups)参数完成:

dfrm$Agrp <- cut2(dfrm$A, g=trunc(length(dfrm$A)/25) )

您可以使用tapplyave或其中一个Hmisc摘要函数在Agrp中聚合B的均值或中位数。在今天的一个问题中有几个有用的例子:How to get Summary statistics by group以及使用这些函数或aggregate或pkg:plyr函数的许多其他例子。

鉴于B值的数量不一定在各组之间保持不变,我认为按A分组值提供单个值的唯一方法是使用split。我添加了一个额外的行来说明非偶数分割可能需要返回一个列表而不是一个更“矩形”的对象:

dat <- read.table(text="A           B
 -10.834510  1.680173
 11.012966  1.866603
 -16.491415  1.868667
 -14.485036  1.900002
 2.629104  1.960929
 -3.597291  2.005348\n 3.5943 3.796", header=TRUE)
 dat$Agrp <- cut2(dat$A, g=trunc(length(dat$A)/3) )
 split(dat$B, dat$Agrp)
 #-----    
$`[-16.49, 2.63)`
[1] 1.680173 1.868667 1.900002 2.005348

$`[  2.63,11.01]`
[1] 1.866603 1.960929 3.796000

如果您想要进行拆分的值向量,那么可以使用levels(dat$Agrp)上的正则表达式来完成。