我有这样的数据
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]
合作,但我不知道如何进行这样的输出
答案 0 :(得分:0)
在我的代码中,我%>%
中使用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+
strong>,这意味着您的结果有所不同。)
# 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
说明
X1+ X2+ M1+ M2+
中期望的条件X1- X2- M1- M2-
中期望的条件