我正在尝试创建一个新数据框,它是一系列向量的精简版本。
虽然我的数据构建类似
mat <- matrix(1:18, 6)
g <- c("a", "a", "b", "b", "c", "c")
df <- cbind(g, mat)
我想实现
result_df喜欢
a 1.5 7.5 13.5
b 3.5 9.5 15.5
c 5.5 11.5 17.5
当我尝试for循环时遇到麻烦,有没有办法lapply()或apply()可以原生地执行此操作?有更简单的解决方案吗?
答案 0 :(得分:2)
另一个可能对未来需求更灵活的选择是使用MATCH (m:Movie {id: 123})
OPTIONAL MATCH p=(m)-->()
DELETE p;
。这需要数据在data.frame中,但听起来就像你所拥有的那样。
dplyr
按df <- data.frame(g, mat)
df %>%
group_by(g) %>%
summarise_all(mean)
列分组,然后取所有剩余列的平均值。它返回:
g
我认为这是你期望的结果。如果与 g X1 X2 X3
1 a 1.5 7.5 13.5
2 b 3.5 9.5 15.5
3 c 5.5 11.5 17.5
结合使用,也可以通过将它们放在长格式中来更轻松地使用/访问这些方法
tidyr
返回:
df %>%
gather(Measurement, Value, -g) %>%
group_by(g, Measurement) %>%
summarise(mean = mean(Value))
答案 1 :(得分:1)
我有两个选项,具体取决于您是先要先进行行操作还是先进行列操作。
第一列选项将使用<head>
<base href="https://polygit.org/polymer+1.7.0/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
<link rel="import" href="paper-menu/paper-menu.html">
<link rel="import" href="paper-item/paper-item.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<paper-menu>
<template is="dom-repeat" items="[[items]]">
<paper-item data-page$="[[item.name]]" sectionid$="[[item.id]]">[[item.name]]</paper-item>
</template>
</paper-menu>
</template>
</dom-module>
</body>
循环遍历所有列,然后使用lapply
按列查找每列的平均值。
tapply
行优先选项会将数据帧按行拆分为多个组,然后使用as.data.frame(lapply(dat, tapply, INDEX = g, mean))
查找每个子数据帧的列均值。
sapply
如果您有一个矩阵## implicit splitting
do.call(rbind, by(dat, g, sapply, mean))
## explicit splitting
do.call(rbind, lapply(split(dat, g), sapply, mean))
而不是数据框,我们也可以这样做
mat
和
apply(mat, 2L, tapply, INDEX = g, mean)
测试数据
do.call(rbind, by(mat, g, colMeans))