我有以下格式的数据框:
dim1 dim2
1 Loc.1 0.325
2 Loc.2 0.325
3 Loc.3 0.321
4 Loc.4 0.256
5 Loc.5 0.255
我想计算'dim2'中两(2)个元素的每个组合的平均值;并将输出转换为矩阵;同时保留'dim1'提供的信息。
现在,我可以使用combn函数获得成对方式:
combn(tab[,2],2, mean)
[1] 0.3250 0.3230 0.2905 0.2900 0.3230 0.2905 0.2900 0.2885 0.2880 0.2555
但是我希望它以类似矩阵的形式显示(实际上它非常类似于'dist'类的对象,因为我希望它可以用于进一步的分析),如下所示:
Loc.1 Loc.2 Loc.3 Loc.4
Loc.2 0.325
Loc.3 0.323 0.323
Loc.4 0.290 0.291 0.289
Loc.5 0.290 0.290 0.288 0.256
(正如您所看到的,我还需要“Loc.x”信息)
我找不到一个简单的函数,可直接在我的数据框'tab'上计算成对计算。我可以使用for循环,但我觉得应该有更直接的方式。
有什么建议吗?非常感谢你!
答案 0 :(得分:4)
以下是将矢量转换为距离矩阵的相对简单的方法:
vec <- c(0.3250, 0.3230, 0.2905, 0.2900, 0.3230, 0.2905, 0.2900, 0.2885, 0.2880, 0.2555)
mat <- matrix(nrow = 5, ncol = 5)
mat[lower.tri(mat)] <- vec
mat <- as.dist(mat)
#output
> mat
1 2 3 4
2 0.3250
3 0.3230 0.3230
4 0.2905 0.2905 0.2885
5 0.2900 0.2900 0.2880 0.2555
答案 1 :(得分:4)
以下是使用expand.grid
代替combn
的单行内容。
as.dist(matrix(apply(expand.grid(tab[, 2], tab[, 2]), 1, mean), 5, 5))
# 1 2 3 4
#2 0.3250
#3 0.3230 0.3230
#4 0.2905 0.2905 0.2885
#5 0.2900 0.2900 0.2880 0.2555
这有效的原因是expand.grid
考虑了两个列向量tab[, 2]
的所有可能组合,而combn
错过了对角元素;然后,我们在组合矩阵上逐行操作,计算均值,然后将vector
首先转换为matrix
,然后转换为dist
对象。
答案 2 :(得分:2)
您也可以使用<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/footer"
app:tabIndicatorColor="@color/female_colour">
<android.support.design.widget.TabItem
android:id="@+id/tab_home"
android:layout_width="@dimen/_25dp"
android:layout_height="@dimen/_25dp"
android:padding="@dimen/_4dp"
android:icon="@drawable/tab_home"
/>
</android.support.design.widget.TabLayout>
功能。
outer