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的列名列表?