美文网首页
R语言 -- 如何将数据框中具有相同列名或具有相同特征的列名的列

R语言 -- 如何将数据框中具有相同列名或具有相同特征的列名的列

作者: 生信摆渡 | 来源:发表于2020-05-27 16:46 被阅读0次

背景

当处理临床样本的数据框时,列名是样本名(SID),而有些样本可能来源于同一病人,我们希望将来源于同一病人的数据进行整合(本例为求平均),变为一列,由此生成一个列名为病人名(PID)的新的数据框。

R语言实现

library("dplyr")

# Build test data
data = data.frame(c(1:10),c(11:20),c(21:30),c(31:40),c(41:50),c(51:60))
SID = c("a1", "a2", "b1", "b2", "c1", "d1")
PID = c("a", "b", "c", "d")
colnames(data) <- SID
> data
   a1 a2 b1 b2 c1 d1
1   1 11 21 31 41 51
2   2 12 22 32 42 52
3   3 13 23 33 43 53
4   4 14 24 34 44 54
5   5 15 25 35 45 55
6   6 16 26 36 46 56
7   7 17 27 37 47 57
8   8 18 28 38 48 58
9   9 19 29 39 49 59
10 10 20 30 40 50 60

# Proccess data
new_data = matrix(NA, nrow(data), length(PID))
for(i in 1:length(PID)){
    
    rep_columns = select(data, contains(PID[i]))
    new_data[, i] = apply(rep_columns, 1, mean)
}
new_data = as.data.frame(new_data)
colnames(new_data) = PID

一起来看看前后对比吧:

> data
   a1 a2 b1 b2 c1 d1
1   1 11 21 31 41 51
2   2 12 22 32 42 52
3   3 13 23 33 43 53
4   4 14 24 34 44 54
5   5 15 25 35 45 55
6   6 16 26 36 46 56
7   7 17 27 37 47 57
8   8 18 28 38 48 58
9   9 19 29 39 49 59
10 10 20 30 40 50 60
> new_data
    a  b  c  d
1   6 26 41 51
2   7 27 42 52
3   8 28 43 53
4   9 29 44 54
5  10 30 45 55
6  11 31 46 56
7  12 32 47 57
8  13 33 48 58
9  14 34 49 59
10 15 35 50 60

相关文章

网友评论

      本文标题:R语言 -- 如何将数据框中具有相同列名或具有相同特征的列名的列

      本文链接:https://www.haomeiwen.com/subject/boawahtx.html