向量添加到数据帧的每一行

时间:2014-11-28 06:30:36

标签: r

我有一个向量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

聚苯乙烯。我这样做是为了使所有列中位数相同,所以一种更简单的方法是使列中位数相同,而不仅仅是将列中位数和列之间的差值与最大中值相加,我们将不胜感激。

3 个答案:

答案 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

如果您决定稍后将其添加为答案,我将删除我的并接受您的邮件。