R:根据数据帧中的条件聚合映射到行号的列名列表

R:根据数据帧中的条件聚合映射到行号的列名列表,r,R,按比例缩小的数据框如下所示: +---+------------+-------------+ | | Label1 | Label2 | +---+------------+-------------+ | 1 | T | F | | 2 | F | F | | 3 | T | T | +---+------------+-------------+ 我需要

按比例缩小的数据框如下所示:

+---+------------+-------------+
|   |   Label1   |   Label2    |
+---+------------+-------------+
| 1 |      T     |     F       |
| 2 |      F     |     F       |
| 3 |      T     |     T       |
+---+------------+-------------+
我需要创建一个列表,将列名映射到所有值为假布尔值的行号。对于上面的示例,它看起来像这样:

+---+------------+-------------+
|   |   Label1   |   Label2    |
+---+------------+-------------+
| 1 |      T     |     F       |
| 2 |      F     |     F       |
| 3 |      T     |     T       |
+---+------------+-------------+
{“Label1”:(2),“Label2”:(1,2)}

我目前正在这样做:

myList = with(data.frame(which(!myDataFrame, arr.ind = TRUE)), list("colNames" = names(myDataFrame)[col], "rows" = row))

l = list()
count = 1;
for (i in myList[["colNames"]]) {
  tmpRowNum = myList[["rows"]][[count]];
  tmpList = l[[i]];
  if (is.null(tmpList)) {
    tmpList = list();
  }
  l[[i]] = c(tmpList, list(tmpRowNum))
  count = count + 1;
}
这确实有效,但由于我对R不熟悉,我只能假设有一种更有效的方法来实现这一点。with函数创建两个单独的列表,我必须将它们组合起来才能得到我想要的结果。

您可以尝试:

df <- data.frame(Label1=c("T","F","T"),Label2=c("F","F","T"))

lapply(df,function(x) which(x=="F"))

$Label1
[1] 2

$Label2
[1] 1 2
要获得第2行中“F”的向量:

res <- apply(df,1,function(x) which(x=="F"))
res[[2]]
 1      2 
res您可以尝试:

df <- data.frame(Label1=c("T","F","T"),Label2=c("F","F","T"))

lapply(df,function(x) which(x=="F"))

$Label1
[1] 2

$Label2
[1] 1 2
要获得第2行中“F”的向量:

res <- apply(df,1,function(x) which(x=="F"))
res[[2]]
 1      2 

res获取行/列索引的一种有用方法是使用
which
arr.ind

i1 <- which(df=="F", arr.ind=TRUE)

i1获取行/列索引的一种有用方法是使用
which
arr.ind

i1 <- which(df=="F", arr.ind=TRUE)

i1是否有可能朝相反的方向进行?将行号映射到其值为false的列名列表?是否有可能以相反方向进行映射?是否将行号映射到其值为false的列名列表?