按值过滤行和列名称的r数据帧

时间:2016-04-08 09:27:39

标签: r

跟进问题: 我正在构建一个闪亮的动态UI,并希望可能的选择取决于以前的选择。 我过滤了数据集

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

我可以使用leat one element&gt; 0

创建所有行和列名称的列表
col <- names(which(colSums(df == 1) > 0))
row <- names(which(rowSums(df == 1) > 0))
col_row <- c(col,row)

现在用户选择col_row的元素。我想要做的下一件事是读取特定选择的行/列名称。

2例

  1. 用户选择a。现在我想从df $ a读取所有行名称 df $ a中的值1
  2. 用户选择X。我希望所有列名称的行X
  3. 中的值为1

2 个答案:

答案 0 :(得分:2)

不是最漂亮的解决方案,但有效。

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

#   a b c d
# X 1 1 1 0
# Y 1 0 0 0
# Z 0 1 0 0

col <- names(which(colSums(df == 1) > 0))
row <- names(which(rowSums(df == 1) > 0))

choice <- "c"

if (choice %in% col) {
  rownames(df[df[choice] == 1, ])
} else if (choice %in% row) {
  colnames(df)[df[choice, ] == 1]
}

答案 1 :(得分:1)

尝试

row.names(df)[df[,col_row=="a"]==1]
#[1] "X" "Y"

d1 <- df[intersect(col_row, "X"),]==1
colnames(d1)[d1]
#[1] "a" "b" "c"