如何为每列分配因子并根据因子级别计算rowmeans

时间:2017-06-26 15:15:18

标签: r dataframe mean

我有一个数据框,我想根据某些条件计算行数,
例如:

df= 
rownames    A1  A2  A3  B1  B2  B3
r1  1   2   3   4   5   6
r2  1   2   3   4   5   6
r3  1   2   3   4   5   6

treatment= factor(rep(c("A","B"),each=3))

我想根据治疗因素水平得到每一行的方法,数据如下:

rownames    A   B
r1  2   5
r2  2   5
r3  2   5

对此有何想法?

2 个答案:

答案 0 :(得分:0)

我们可以使用melt中的data.table执行此操作。 measure参数可以将多个patterns转换为'long'格式,按'rownames'分组并指定.SDcols中的列,循环遍历Data.table的子集({{ 1}})并获取.SD

mean

注意:输出为library(data.table) melt(setDT(df), measure = patterns("^A", "^B"), value.name = c('A', 'B'))[, lapply(.SD, mean), rownames, .SDcols = A:B] # rownames A B #1: r1 2 5 #2: r2 2 5 #3: r3 2 5 ,可以转换为data.tabledata.frame),如OP输出中所示

另一个选项是来自setDF

split
base R

数据

sapply(split.default(df[-1], sub("\\d+", "", names(df)[-1])), rowMeans)
#     A B
#[1,] 2 5
#[2,] 2 5
#[3,] 2 5

答案 1 :(得分:0)

在使用grep的基础R中:

sapply(levels(treatment), function(a) rowMeans(df[,grep(a, names(df))]))

#     A B
#[1,] 2 5
#[2,] 2 5
#[3,] 2 5