如果值等于X,则保留行名和列名

use*_*882 2 r

以下数据集

  a b c d e 
X 1 1 1 1 0
Z 1 0 0 1 0
Y 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我想创建列表.当列中至少有一个值等于1时,一个具有所有列名称.一个列表包含所有行名称(X,Z,Y),每当至少一个行元素的值为1时.

我试过了:

df[Reduce(`|`, as.data.frame(lapply(df)), function(x) x %in% 1),]
Run Code Online (Sandbox Code Playgroud)

没有结果.

最后我想要

x=(a,b,c,d) and z=(X,Z)
Run Code Online (Sandbox Code Playgroud)

tos*_*pig 5

运用

df <- read.table(text = "  a b c d e 
X 1 1 1 1 0
Z 1 0 0 1 0
Y 0 0 0 0 0", header = T)

> df
#   a b c d e
# X 1 1 1 1 0
# Z 1 0 0 1 0
# Y 0 0 0 0 0


names(which(colSums(df == 1) > 0))
# [1] "a" "b" "c" "d"

names(which(rowSums(df == 1) > 0))
# [1] "X" "Z"
Run Code Online (Sandbox Code Playgroud)