我有一个数据框df
.
ID 001-alpha 001-sigma 001-delta 001-gamma 002-alpha 002-beta 002-charlie 002-delta
12 1 2 3 3 2 NA 2 0
21 NA 1 3 NA 3 2 2 NA
24 1 2 NA 3 3 1 3 2
36 NA 2 3 4 2 2 NA 1
44 NA 1 2 3 1 2 1 2
57 0 NA 2 3 1 1 3 1
在这df
篇文章中,我有几个专栏:
-
ID
字段表示产品ID,该ID是唯一的 -
以
001-
或002-
开头的列名表示这些产品的一些规格
Requirement
我感兴趣的是判断每对产品规范,有多少ID是通用的,即它们包含非null或非NA
值.
为了进一步解释,如果我以first two columns(001-alpha
和001-sigma
)为例.这里,ID=12和ID=24在这些列之间是公共的或非空的.对于其余ID,其中一列中缺少值.因此,我所需的输出列001-alpha-sigma
的值为2
.
类似地,对于first和third列(001-alpha
和001-delta
),同样只有两个公共ID(即ID=12和ID=57)在这两列中包含非空值.因此,输出列001-alpha-delta
将包含2
.
我需要的输出如下:
001-alpha-sigma 001-alpha-delta 001-alpha-gamma 001-sigma-delta 001-sigma-gamma 001-delta-gamma 002-alpha-beta 002-alpha-charlie 002-alpha-delta 002-beta-charlie 002-beta-delta 002-charlie-delta
2 2 3 4 4 4 5 5 5 4 4 4
有没有一种简单的方法来提取这些信息?e、 g.,我们可以使用dplyr吗?
我看过其他几个帖子,但它们不符合我的要求.例如
Sum columns by group (row names) in a matrix
为了方便起见,我还分享了下面的dput(df)
条.
structure(list
(ID = structure(1:6, .Label = c("12", "21", "24", "36", "44", "57"),
class = "factor"),
`001.alpha` = c(1L, NA, 1L, NA, NA, 0L),
`001.sigma` = c(2L, 1L, 2L, 2L, 1L, NA),
`001.delta` = c(3L, 3L, NA, 3L, 2L, 2L),
`001.gamma` = c(3L, NA, 3L, 4L, 3L, 3L),
`002.alpha` = c(2L, 3L, 3L, 2L, 1L, 1L),
`002.beta` = c(NA,2L, 1L, 2L, 2L, 1L),
`002.charlie` = c(2L, 2L, 3L, NA, 1L,3L),
`002.delta` = c(0L, NA, 2L, 1L, 2L, 1L)),
row.names = c(NA, -6L), class = "data.frame")
谢谢你的帮助!