簡體   English   中英

將數據集中的值與R中另一個數據集中的值相乘

[英]Multiply values in a dataset by values in another dataset in R

我有兩個數據集,它們既共享一個公共ID變量,又共享n個變量,分別表示為SNP1-SNP n 下面顯示了兩個數據集的示例

數據集1

ID SNP1 SNP2 SNP3 SNP4 SNP5 SNP6 SNP7
1   0    1    1    0    0    0    0
2   1    1    0    0    0    0    0
3   1    0    0    0    1    1    0
4   0    1    1    0    0    0    0
5   1    0    0    0    1    1    0
6   1    0    0    0    1    1    0
7   0    1    1    0    0    0    0

數據集2

ID SNP1 SNP2 SNP3 SNP4 SNP5 SNP6 SNP7
1  0.65 1.3  2.8  0.43 0.62 0.9  1.5
2  0.74 1.6  3.4  0.9  2.4  4.4  2.3
3  0.28 0.5  5.7  6.7  0.3  2.5  0.56
4  0.74 1.6  3.4  0.9  2.4  4.4  2.3
5  0.65 1.3  2.8  0.43 0.62 0.9  1.5
6  0.74 1.6  3.4  0.9  2.4  4.4  2.3
7  0.28 0.5  5.7  6.7  0.3  2.5  0.56

我想將數據幀1中給定位置的每個值與數據幀2中等效位置的值相乘。

例如,我想將數據集1(值= 0)中的位置[1,2]乘以數據集2(值= 0.65)中的位置[1,2]。 我的數據集非常大,涵蓋了將近300列和500,000個ID。

實際上,SNP1- n的變量名更長(例如,它們實際上讀為Affx.5869593),因此我不能僅在代碼中使用SNP1-300,而必須通過列數來指定。

我是否需要先按人員ID和SNP名稱取消列出這兩個數據集? 可以使用什么函數將兩個數據集中的值相乘?

我假設您正在嘗試返回第三個數據幀,該數據幀將在每​​個位置具有兩個數據幀中該位置的值的乘積。

例如,如果以下是您的兩個數據框

df1 <- structure(list(ID = c(1, 2, 3, 4, 5), SNP1a = c(0, 1, 1, 0, 1
), SNP2a = c(1, 1, 0, 1, 0)), class = "data.frame", row.names = c(NA, 
-5L))

ID  SNP1a  SNP2a
1     0     1
2     1     1
3     1     0
4     0     1
5     1     0

df2 <- structure(list(ID = c(1, 2, 3, 4, 5), SNP1b = c(0.65, 0.74, 
0.28, 0.74, 0.65), SNP2b = c(1.3, 1.6, 0.5, 1.6, 1.3)), class = . 
"data.frame", row.names = c(NA, -5L))

ID SNP1b SNP2b
1  0.65   1.3
2  0.74   1.6
3  0.28   0.5
4  0.74   1.6
5  0.65   1.3

然后

df3 <- df1[,2:3] * df2[,2:3]

   SNP1   SNP2
1  0.00   1.3
2  0.74   1.6
3  0.28   0.0
4  0.00   1.6
5  0.65   0.0

將起作用(只要兩個數據幀的大小相等)。

如果您的數據框具有相同的ID集並且大小相同,則可以同時對ID進行排序並執行以下操作:

df <- data.frame(
  id = c(1,2,3,4,5),
  snp1 = c(0,0,1,0,0),
  snp2 = c(1,1,1,0,1)
)

df2 <- data.frame(
  id <- c(1,2,3,4,5),
  snp1 <- c(0.3,0.2,0.3,0.1,0.2),
  snp2 <- c(0.5,0.8,0.2,0.3,0.3)

)


res <- mapply(`*`, df[,-1], df2[,-1)
res$id <- df$id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM