我有一个向量to_add
,如下所示:
> to_add
X0 X3 X6 X9 X12 X18 X21
1 6 0 4 1 5 3 6
我想将它添加到我的数据框数据的每一行,如下所示:
> head(data)
X0 X3 X6 X9 X12 X18 X21
chr5_89951600_89954799 18 26 19 22 29 30 23
chr16_70874600_70876999 15 26 25 14 18 23 16
chr2_51953000_51955199 7 26 7 14 26 17 33
chr3_143120600_143123799 25 40 35 23 25 28 31
chr15_34771400_34774599 27 42 31 21 24 15 34
chr2_13077000_13083999 36 73 52 48 73 54 53
我该如何有效地做到这一点?我怀疑写一个循环是最聪明的方式......
不幸的是,data + to_add
不起作用,即使data + 1
确实......
data + as.numeric(to_add)
没有做我想要的 - 结果是错误的!
> head(data + as.numeric(to_add))
X0 X3 X6 X9 X12 X18 X21
chr5_89951600_89954799 24 32 25 28 35 36 29
chr16_70874600_70876999 15 26 25 14 18 23 16
chr2_51953000_51955199 11 30 11 18 30 21 37
chr3_143120600_143123799 26 41 36 24 26 29 32
chr15_34771400_34774599 32 47 36 26 29 20 39
chr2_13077000_13083999 39 76 55 51 76 57 56
聚苯乙烯。我这样做是为了使所有列中位数相同,所以一种更简单的方法是使列中位数相同,而不仅仅是将列中位数和列之间的差值与最大中值相加,我们将不胜感激。
答案 0 :(得分:4)
你可以做到
data + to_add[col(data)]
# X0 X3 X6 X9 X12 X18 X21
#chr5_89951600_89954799 24 26 23 23 34 33 29
#chr16_70874600_70876999 21 26 29 15 23 26 22
#chr2_51953000_51955199 13 26 11 15 31 20 39
#chr3_143120600_143123799 31 40 39 24 30 31 37
#chr15_34771400_34774599 33 42 35 22 29 18 40
#chr2_13077000_13083999 42 73 56 49 78 57 59
答案 1 :(得分:2)
为此目的有一个特定的功能:
sweep(data, 2, to_add, "+")
X0 X3 X6 X9 X12 X18 X21
chr5_89951600_89954799 24 26 23 23 34 33 29
chr16_70874600_70876999 21 26 29 15 23 26 22
chr2_51953000_51955199 13 26 11 15 31 20 39
chr3_143120600_143123799 31 40 39 24 30 31 37
chr15_34771400_34774599 33 42 35 22 29 18 40
chr2_13077000_13083999 42 73 56 49 78 57 59
它使用“统计”中的值在“边距”的所有项目中应用特定函数。默认情况下,它是该边距的mean
(此处您想要列),但它可以是与边距长度相同的任何向量。
答案 2 :(得分:1)
谢谢,thelatemail!
result <- data.frame(Map("+",data,to_add),row.names=rownames(data))
> head(result)
X0 X3 X6 X9 X12 X18 X21
chr5_89951600_89954799 24 26 23 23 34 33 29
chr16_70874600_70876999 21 26 29 15 23 26 22
chr2_51953000_51955199 13 26 11 15 31 20 39
chr3_143120600_143123799 31 40 39 24 30 31 37
chr15_34771400_34774599 33 42 35 22 29 18 40
chr2_13077000_13083999 42 73 56 49 78 57 59
如果您决定稍后将其添加为答案,我将删除我的并接受您的邮件。