当数据> 0时,如何按行列出列名

时间:2014-10-15 15:35:33

标签: r

您好我有一个excel doc(100列,350行),数据值为0-10000。我一直试图获取哪些列包含值> 0的列表。我一直在修补申请,但无法得到任何工作,任何帮助将不胜感激。

e.g       Col1  Col2  Col3  Col4
    row 1  1     2     0     0      
    row 2  0     1    1      0
    row 3  2     0    0      0

    row 1 col1 col2
    row 2 col2 col3 
    row 3 col1'

2 个答案:

答案 0 :(得分:1)

首次将数据转换为逻辑矩阵后,您可以使用names。如果df是您的原始数据,

apply(df > 0, 1, function(x) names(which(x)))
# $`row 1`
# [1] "Col1" "Col2"
#
# $`row 2`
# [1] "Col2" "Col3"
#
# $`row 3`
# [1] "Col1"

答案 1 :(得分:1)

另一种方法是使用有效的矩阵索引子设置创建名称和拟合矩阵,以仅获得满足特定条件的名称。

nn = matrix(rep(names(dat),nrow(dat)),nrow(dat),byrow=TRUE)
nn
     [,1]   [,2]   [,3]   [,4]  
[1,] "Col1" "Col2" "Col3" "Col4"
[2,] "Col1" "Col2" "Col3" "Col4"
[3,] "Col1" "Col2" "Col3" "Col4"

现在使用which获取正值索引:

id <- which(dat>0,arr.ind = TRUE)
   row col
row1   1   1
row3   3   1
row1   1   2
row2   2   2
row2   2   3

您可以使用ID来对nn进行子集化,例如nn[id],但是因为您想在此处逐行分组,所以我使用的是by

by(id,id[,'row'],FUN=function(i)nn[as.matrix(i)])

NDICES: 1
[1] "Col1" "Col2"
------------------------------------------------------------------------------------------------------ 
INDICES: 2
[1] "Col2" "Col3"
------------------------------------------------------------------------------------------------------ 
INDICES: 3
[1] "Col1"