如何仅在data.frame中包含感兴趣的值时才返回列标题?
我有一个data.frame,包含多个列,由如何仅在data.frame中包含感兴趣的值时才返回列标题?,r,rgui,R,Rgui,我有一个data.frame,包含多个列,由TRUE和FALSE逻辑答案组成,如下所示: >` . X1 X2 X3 X4 X5 X6 X7 X8 [1,] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE [3,] FALSE FALSE FALSE FALSE FALSE FALSE
TRUE
和FALSE
逻辑答案组成,如下所示:
>` . X1 X2 X3 X4 X5 X6 X7 X8
[1,] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[6,] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
`
我试图只提取存在TRUE
的列的标题。例如,在这里,我将获得X4、X6、X7
和X8
输出,但排除所有其他输出
在上下文中,TRUE
表示细胞在特定时间点对刺激作出反应。我只需要知道单元格是否响应(即列中至少存在一次TRUE
),而不需要知道单元格何时响应
提前感谢您对此提供的任何帮助 试试看:
colnames(M)[colSums(M) >= 1]
> names(ddf)[sapply(ddf, any)]
[1] "X4" "X6" "X7" "X8"
colSums
将对TRUE
值求和,然后将其与值1进行比较以提取列名
例如:
M <- matrix(FALSE, nrow = 4, ncol = 5, dimnames = list(NULL, paste0("X", 1:5)))
M[cbind(c(1, 2, 3, 4), c(2, 2, 4, 5))] <- TRUE
M
# X1 X2 X3 X4 X5
# [1,] FALSE TRUE FALSE FALSE FALSE
# [2,] FALSE TRUE FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE TRUE FALSE
# [4,] FALSE FALSE FALSE FALSE TRUE
colnames(M)[colSums(M) >= 1]
# [1] "X2" "X4" "X5"
M试试:
对于矩阵m
,可以执行一些列索引
> unique(colnames(m)[col(m)[m]])
[1] "X4" "X6" "X7" "X8"
或者您可以在col
> unique(col(m, as.factor=TRUE)[m])
[1] X4 X6 X7 X8
Levels: X1 X2 X3 X4 X5 X6 X7 X8
起初我认为这是一个矩阵,但现在我看到它可能是一个数据帧。因此,对于数据帧d
> names(Filter(length, Map(which, d)))
[1] "X4" "X6" "X7" "X8"
还有一个。这一个没有像上面的Map
选项那样使用循环
> names(d)[intersect(seq(d), col(d)[unlist(d)])]
[1] "X4" "X6" "X7" "X8"
您显示的内容看起来不像data.frame。请使用正确的术语。谢谢!这很好用。是的,我指的是矩阵,而不是数据框架——我是一名生物学家,但还是会把术语稍微去掉一点。对不起!