gpt4 book ai didi

r - 如何比较多行中的两列

转载 作者:行者123 更新时间:2023-12-02 04:26:18 25 4
gpt4 key购买 nike

我有这样的数据

df<- structure(list(X1 = c(37L, 36L, 35L, 35L, 35L, 34L, 29L, 28L, 
28L, 26L, 25L, 24L), X2 = c(40L, 44L, 49L, 41L, 0L, 0L, 0L, 25L,
26L, 37L, 0L, 22L), M1 = c(60L, 55L, 47L, 46L, 36L, 42L, 25L,
0L, 33L, 42L, 50L, 22L), M2 = c(19L, 0L, 32L, 44L, 27L, 31L,
17L, 0L, 18L, 45L, 10L, 11L)), class = "data.frame", row.names = c(NA,
-12L))

我想比较每对列

1 with 2
1 with 3
1 with 4
2 with 3
2 with 4

我想知道与其他列相比,第 1 列的哪些行和多少行具有值(0 除外)其他人也一样

例如

X1 有 12 个值第 5、6、7、11 行有值,而 X2 没有第 8 行有值而 M1 没有第 2 行和第 8 行有值,而 M2 没有

所以输出应该是这样的

   Total X1+  X1-  X2+  X2-  M1+  M1-  M2+  M2-
X1 12 0 0 4 0 2 0 1 0
X2 8 0 4 0 0 1 4 2 4
M1 11 0 1 4 1 0 0 1 0
M2 10 0 2 4 2 0 1 0 0

要计算每列的总数,我可以执行以下操作

colSums(df != 0) 

我尝试使用 df$X1[df$X1 %in% df$X2] 来完成剩下的工作,但我不知道如何生成这样的输出

最佳答案

在我的代码中,我在 library(dplyr) 中使用 %>% 只是为了整洁。我没有在其中使用其他功能。

df2 <- data.frame(df != 0)
pair <- expand.grid(1:4, 1:4)
name <- names(df)

mapply(function(x, y){
a <- sum(df2[[x]] - df2[[y]] == 1) # TRUE - FALSE = 1
b <- sum(df2[[x]] - df2[[y]] == -1) # FALSE - TRUE = -1
return(c(a, b))
}, pair[[1]], pair[[2]]) %>% t %>%
matrix(4, 8, dimnames = list(name, c(paste0(name, "+"), c(paste0(name, "-"))))) %>%
as.data.frame

输出:(我标记了两个值X1-M1+X1-M2+*,这意味着结果与你的不同。)

#    X1+ X2+  M1+  M2+ X1- X2- M1- M2-
# X1 0 4 1* 2* 0 0 0 0
# X2 0 0 1 2 4 0 4 4
# M1 0 4 0 1 1 1 0 0
# M2 0 4 0 0 2 2 1 0

描述

  • df2 : 将数据转换为 bool 值,表示值是否不等于零。
  • pair:创建所有可能的列对。
  • a:对于您在 X1+ X2+ M1+ M2+
  • 中期望的条件
  • b:对于您在 X1- X2- M1- M2-
  • 中期望的条件

关于r - 如何比较多行中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54241457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com