您好我有一个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'
答案 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"