试图获取总数 > 0 的列的名称。我已经尝试过
df[sapply(df, function(x) any(x > 0))]
Run Code Online (Sandbox Code Playgroud)
但这给了我实际的数值。然后我尝试了
names(df)[colSums(df)>0]
Run Code Online (Sandbox Code Playgroud)
但收到一个 NULL。这是我的 df 的示例,其中我期望输出“SRR960396”和“SRR960403”。
> dput(df)
structure(c(14, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0), dim = 4:3, dimnames = list(
c("27b1da20c7a5364614a540521d5e38c0", "bd60888ac07bff9651845c6f6aca4fa8",
"e7474b1fd688aa54814538b69a56d202", "85907e71eb899b7edce9bf8d23746413"
), c("SRR960396", "SRR960402", "SRR960403")))
Run Code Online (Sandbox Code Playgroud)
你应该知道这df不是 adata.frame而是 a matrix,即
> class(df)
[1] "matrix" "array"
Run Code Online (Sandbox Code Playgroud)
应该使用so来获取列名称,colnames(df)而不是。names
解决方法是使用colSums+which来定位具有正值的列,例如,
> names(which(colSums(df > 0) > 0))
[1] "SRR960396" "SRR960403"
Run Code Online (Sandbox Code Playgroud)