R 用来自不同数据帧的值替换每个第n列中的所有值

R 用来自不同数据帧的值替换每个第n列中的所有值,r,R,我有一个大数据帧a,包含47323行和1570列的微阵列数据。我需要将数据框A中每三列中的所有值替换为数据框B中存储的新的、更正的值。因此,我需要将A中第3、6、9等列中的值替换为B中第1、2、3等列中的值 两个数据帧中的行数相同。列名部分匹配(数据框A中的每三个列名和数据框B中的列名) 有人能告诉我解决这个问题的正确方向吗 对于生物学家提出的基本编程问题,我深表歉意。可能是这样的吧 cols <- seq(3, 1570, 3) A[cols] <- B[seq(cols)] c

我有一个大数据帧a,包含47323行和1570列的微阵列数据。我需要将数据框A中每三列中的所有值替换为数据框B中存储的新的、更正的值。因此,我需要将A中第3、6、9等列中的值替换为B中第1、2、3等列中的值

两个数据帧中的行数相同。列名部分匹配(数据框A中的每三个列名和数据框B中的列名)

有人能告诉我解决这个问题的正确方向吗


对于生物学家提出的基本编程问题,我深表歉意。

可能是这样的吧

cols <- seq(3, 1570, 3)
A[cols] <- B[seq(cols)]

cols以下是我的建议:

#--- Example data ---
n <- 5
m1 <- 18
m2 <- 4
A <- as.data.frame(matrix(1:(n*m1),n,m1))
B <- as.data.frame(outer(rep(-100,5)-(1:n),1:m2))
A
B
#------------------------------------------------
i <- 1
k <- min(1+(ncol(A)-i) %/% 3,ncol(B))
A[,3*(1:k)+i-3] <- B[,1:k]
A
#---示例数据---
n n m1 m2 A B A
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
1  1  6 11 16 21 26 31 36 41  46  51  56  61  66  71  76  81  86
2  2  7 12 17 22 27 32 37 42  47  52  57  62  67  72  77  82  87
3  3  8 13 18 23 28 33 38 43  48  53  58  63  68  73  78  83  88
4  4  9 14 19 24 29 34 39 44  49  54  59  64  69  74  79  84  89
5  5 10 15 20 25 30 35 40 45  50  55  60  65  70  75  80  85  90
>B
V1 V2 V3 V4 V5 V6 V7 V8
1 -101 -202 -303 -404 -505 -606 -707 -808
2 -102 -204 -306 -408 -510 -612 -714 -816
3 -103 -206 -309 -412 -515 -618 -721 -824
4 -104 -208 -312 -416 -520 -624 -728 -832
5 -105 -210 -315 -420 -525 -630 -735 -840
> #------------------------------------------------
>ika[,3*(1:k)+i-3]A
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
1  1 -101 11 16 -202 26 31 -303 41  46 -404  56  61 -505  71  76 -606  86
2  2 -102 12 17 -204 27 32 -306 42  47 -408  57  62 -510  72  77 -612  87
3  3 -103 13 18 -206 28 33 -309 43  48 -412  58  63 -515  73  78 -618  88
4  4 -104 14 19 -208 29 34 -312 44  49 -416  59  64 -520  74  79 -624  89
5  5 -105 15 20 -210 30 35 -315 45  50 -420  60  65 -525  75  80 -630  90
> 

如果“B”中的列名称与A中应替换的列名称匹配,您只需使用

A[colnames(B)] <- B

A[colnames(B)]可能有助于给出一个小子集作为示例。感谢您的回答。对不起,如果我不是很清楚。。。需要用BI中的第1、2、3等列替换中的第3、6、9等列更新了我的示例。它也有效!非常感谢你的帮助,成功了!非常感谢。为什么我什么都不买呢?我的答案更为详尽,而且比马里奥德博士公认答案的正确版本来得更早。我的第二个答案呢?我做错了什么?);我希望我能接受这两个答案。不幸的是,系统不允许我这样做:(两个答案都有效,但是,我接受了drmaroid的答案,因为对我来说,它更容易理解/修改/适应。无意冒犯,再次感谢您的解决方案。
> #--- Example data ---
> n <- 5

> m1 <- 18

> m2 <- 8

> A <- as.data.frame(matrix(1:(n*m1),n,m1))

> B <- as.data.frame(outer(rep(-100,5)-(1:n),1:m2))

> A
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
1  1  6 11 16 21 26 31 36 41  46  51  56  61  66  71  76  81  86
2  2  7 12 17 22 27 32 37 42  47  52  57  62  67  72  77  82  87
3  3  8 13 18 23 28 33 38 43  48  53  58  63  68  73  78  83  88
4  4  9 14 19 24 29 34 39 44  49  54  59  64  69  74  79  84  89
5  5 10 15 20 25 30 35 40 45  50  55  60  65  70  75  80  85  90

> B
    V1   V2   V3   V4   V5   V6   V7   V8
1 -101 -202 -303 -404 -505 -606 -707 -808
2 -102 -204 -306 -408 -510 -612 -714 -816
3 -103 -206 -309 -412 -515 -618 -721 -824
4 -104 -208 -312 -416 -520 -624 -728 -832
5 -105 -210 -315 -420 -525 -630 -735 -840

> #------------------------------------------------
> i <- 2

> k <- min(1+(ncol(A)-i) %/% 3,ncol(B))

> A[,3*(1:k)+i-3] <- B[,1:k]

> A
  V1   V2 V3 V4   V5 V6 V7   V8 V9 V10  V11 V12 V13  V14 V15 V16  V17 V18
1  1 -101 11 16 -202 26 31 -303 41  46 -404  56  61 -505  71  76 -606  86
2  2 -102 12 17 -204 27 32 -306 42  47 -408  57  62 -510  72  77 -612  87
3  3 -103 13 18 -206 28 33 -309 43  48 -412  58  63 -515  73  78 -618  88
4  4 -104 14 19 -208 29 34 -312 44  49 -416  59  64 -520  74  79 -624  89
5  5 -105 15 20 -210 30 35 -315 45  50 -420  60  65 -525  75  80 -630  90
> 
A[colnames(B)] <- B