我有一个大数据帧A,其微阵列数据为47323行和1570列。我需要将数据帧A中每第三列中的所有值替换为存储在数据帧B中的新的校正值。因此,我需要将A列中的第3,6,9等等值替换为第1列中的值,来自B的2,3等。
两个数据框中的行数相同。列名称部分匹配(数据框A中的每三个列名称和数据框B中的列名称)。
有谁能请我指出正确的方向来解决这个问题?
我对生物学家提出的基本编程问题表示道歉。
答案 0 :(得分:0)
这样的事可能吗?
cols <- seq(3, 1570, 3)
A[cols] <- B[seq(cols)]
这将取代A中的第3列,第6列,第9列等,其中包含来自B的第1,2,3等列。
答案 1 :(得分:0)
以下是我的建议:
#--- 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
A的列i,i + 3,i + 6,......被B列1,2,3,...替换:
> #--- 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
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
1 -101 -202 -303 -404
2 -102 -204 -306 -408
3 -103 -206 -309 -412
4 -104 -208 -312 -416
5 -105 -210 -315 -420
> #------------------------------------------------
> i <- 1
> 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 -101 6 11 -202 21 26 -303 36 41 -404 51 56 61 66 71 76 81 86
2 -102 7 12 -204 22 27 -306 37 42 -408 52 57 62 67 72 77 82 87
3 -103 8 13 -206 23 28 -309 38 43 -412 53 58 63 68 73 78 83 88
4 -104 9 14 -208 24 29 -312 39 44 -416 54 59 64 69 74 79 84 89
5 -105 10 15 -210 25 30 -315 40 45 -420 55 60 65 70 75 80 85 90
>
如果&#34; B&#34;如果列太多,则会忽略悬垂列。例如,如果m2 = 8且i = 2:
> #--- 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
>
答案 2 :(得分:0)
如果“B”中列的名称与A中应该替换的列的名称相匹配,则可以使用
left -> Java