R:如何应用中位数来合并输出?

时间:2015-10-03 19:51:12

标签: r vector median combn

我有一个数据框:

df1
vec1  vec2  vec3  vec4  vec5
0     10    5     12    5
10    20    13    1     7
20    30    28    13    16

我对它执行combn():

x = combn( df1[,1:4] , 3 )

返回如下矩阵:

x
V1           V2
c(0,10,20)   c(0,10,20)
c(10,20,30)  c(5,13,28)
c(5,13,28)   c(12,1,13)

我想获得一个向量,其中每个向下的元素是每列x的c(n,n + 1,n + 2)中每个n的中值。像这样:

y
V1                         V2
5 #(median of 0,10,5)      5 #(median of 0,5,12)
13 #(median of 10,20,13)   10 #(median of 0,5,12)
28 #(median of 20,30,28)   20 #(median of 20,28,13)

所以你看到它被转换,以便y中向量的每个项目都是列表原始combn()向量中每个n元素的中位数。

1 个答案:

答案 0 :(得分:2)

我们可以使用apply()在行上应用combn(),然后使用median()中的combn()函数,转置结果。

t(apply(df1[1:4], 1, combn, 3, median))
#      [,1] [,2] [,3] [,4]
# [1,]    5   10    5   10
# [2,]   13   10   10   13
# [3,]   28   20   20   28

数据:

df1 <- structure(list(vec1 = c(0L, 10L, 20L), vec2 = c(10L, 20L, 30L
), vec3 = c(5L, 13L, 28L), vec4 = c(12L, 1L, 13L), vec5 = c(5L, 
7L, 16L)), .Names = c("vec1", "vec2", "vec3", "vec4", "vec5"), class = "data.frame", row.names = c(NA, 
-3L))