私は現在、ペアワイズ相関の束の以下のようなデータフレームを持っています:
データ
structure(list(ID1 = c("A", "A", "A", "B", "B", "C"), ID2 = c("B",
"C", "D", "C", "D", "D"), cor = c(0.6, 0.6, 0.2, 0.1, 0.9, 0.2
), value1 = c(50L, 50L, 50L, 20L, 20L, 30L), value2 = c(20L,
30L, 100L, 30L, 100L, 100L)), class = "data.frame", row.names = c(NA,
-6L))
ID1 ID2 cor value1 value2
1 A B 0.6 50 20
2 A C 0.6 50 30
3 A D 0.2 50 100
4 B C 0.1 20 30
5 B D 0.9 20 100
6 C D 0.2 30 100
ID1またはID2のどちらからのものであるかに応じて、corとvalue1またはvalue2のいずれかとの間の製品のすべてのID(つまり、B)の合計を取得しようとしています。
たとえば、Bの合計は(cor x value)になります。
(0.6 x 50) + (0.1 x 30) + (0.9 x 100)
基本的に、約20000の一意のIDに対してこれを行う必要があります。これが理にかなっていることを願っています。私は(まだ)Rはそれほど得意ではありません!
これはあなたが必要とするものを達成しますか?
library(tidyverse)
df2 <- df %>%
pivot_longer(names_to = "names", values_to = "values", -c(cor:value2)) %>%
mutate(value = if_else(names == "ID1", value2, value1),
sum = cor * value) %>%
group_by(values) %>%
summarise(sum = sum(sum))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加