满足 R 中的条件时从另一个数据帧计算 z 分数
Calculate z-score from another dataframe when meeting conditions in R
我有两个数据框:
Node1<-c(1, 2, 3, 4, 5, 6, 7)
Node1<-c(1, 1, 1, 2, 2, 3)
Node2<-c(2, 3, 4, 3, 4, 4)
Mean<-c(2, 1, 5, 3, 2, 3)
SD<-c(0.1, 0.2, 0.01, 0.2, 0.01, 0.01)
df1<-data.frame(Node1, Node2, Mean, SD)
df1
Node1 Node2 Mean SD
1 1 2 2 0.10
2 1 3 1 0.20
3 1 4 5 0.01
4 2 3 3 0.20
5 2 4 2 0.01
6 3 4 3 0.01
df2<-data.frame(Node1, Node2, value)
df2
Node1 Node2 value
1 1 2 1
2 1 3 2
3 1 4 1
4 2 3 4
5 2 4 6
6 3 4 7
对于 df2 中的每个“值”行,我想使用 df1 中相应节点对(即节点 1 和节点 2)的均值和标准差 (SD) 作为参考值来计算 z 分数。例如,对于 df2 的第一行,z 分数应为 ((1-2)/0.10),因为相应的平均值和 SD 是通过匹配来自两个 dfs 的 Node1 和 Node2 值得出的。
如何在 R 中执行此操作?我目前的解决方案是使用 left_join
组合 df1 和 df2,然后使用 mutate
和 case_when
但我无法超越这个来提取 z 分数,同时保留特定条件(即, 同时匹配来自两个 dfs 的 Node1 和 Node2 值)
我认为你可以这样做:
left_join(df1, df2, by = c('Node1', 'Node2')) %>%
mutate(z_score = (Mean - value) / SD)
#> Node1 Node2 Mean SD value z_score
#> 1 1 2 2 0.10 1 10
#> 2 1 3 1 0.20 2 -5
#> 3 1 4 5 0.01 1 400
#> 4 2 3 3 0.20 4 -5
#> 5 2 4 2 0.01 6 -400
#> 6 3 4 3 0.01 7 -400
我有两个数据框:
Node1<-c(1, 2, 3, 4, 5, 6, 7)
Node1<-c(1, 1, 1, 2, 2, 3)
Node2<-c(2, 3, 4, 3, 4, 4)
Mean<-c(2, 1, 5, 3, 2, 3)
SD<-c(0.1, 0.2, 0.01, 0.2, 0.01, 0.01)
df1<-data.frame(Node1, Node2, Mean, SD)
df1
Node1 Node2 Mean SD
1 1 2 2 0.10
2 1 3 1 0.20
3 1 4 5 0.01
4 2 3 3 0.20
5 2 4 2 0.01
6 3 4 3 0.01
df2<-data.frame(Node1, Node2, value)
df2
Node1 Node2 value
1 1 2 1
2 1 3 2
3 1 4 1
4 2 3 4
5 2 4 6
6 3 4 7
对于 df2 中的每个“值”行,我想使用 df1 中相应节点对(即节点 1 和节点 2)的均值和标准差 (SD) 作为参考值来计算 z 分数。例如,对于 df2 的第一行,z 分数应为 ((1-2)/0.10),因为相应的平均值和 SD 是通过匹配来自两个 dfs 的 Node1 和 Node2 值得出的。
如何在 R 中执行此操作?我目前的解决方案是使用 left_join
组合 df1 和 df2,然后使用 mutate
和 case_when
但我无法超越这个来提取 z 分数,同时保留特定条件(即, 同时匹配来自两个 dfs 的 Node1 和 Node2 值)
我认为你可以这样做:
left_join(df1, df2, by = c('Node1', 'Node2')) %>%
mutate(z_score = (Mean - value) / SD)
#> Node1 Node2 Mean SD value z_score
#> 1 1 2 2 0.10 1 10
#> 2 1 3 1 0.20 2 -5
#> 3 1 4 5 0.01 1 400
#> 4 2 3 3 0.20 4 -5
#> 5 2 4 2 0.01 6 -400
#> 6 3 4 3 0.01 7 -400