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