R语言如何提取数据框值大于0单元格的行列名及数值存入空数据框
R语言提取数据框中大于0的单元格信息并写入空数据框
原有代码问题说明
你之前运行的mp3<- which(rownames(df[,] > 0))存在逻辑错误:
rownames()仅能提取数据框行名,无法直接对单元格值做判断- 未给
which()设置arr.ind = TRUE参数时,默认只会返回向量形式的位置序号,无法匹配对应的行列信息 - 没有做值、行名、列名的组装步骤,自然无法得到预期结果
可行实现方案
第一步:构造示例源数据(和你给出的结构一致)
df <- data.frame( X = c(1, 0, 0), Y = c(2, 0, 1), Z = c(3, 1, 0), row.names = c("A", "B", "C") )
第二步:核心实现代码
直接运行以下代码即可把结果存入你预先创建的mP3空数据框:
# 你预先创建的空数据框 mP3 <- data.frame() # 提取所有值大于0的单元格的行列位置索引 cell_pos <- which(df > 0, arr.ind = TRUE) # 匹配行名、列名、单元格值,组装为结果数据框 mP3 <- data.frame( rowname = rownames(df)[cell_pos[, "row"]], colname = colnames(df)[cell_pos[, "col"]], value = df[cell_pos] )
运行结果
最终mP3存储的内容如下,完全匹配需求:
rowname colname value 1 A X 1 2 A Y 2 3 C Y 1 4 A Z 3 5 B Z 1
可选调整
如果需要按行名/列名对结果排序,可以在组装完成后加排序逻辑,例如按行名排序:
mP3 <- mP3[order(mP3$rowname), ]
内容的提问来源于stack exchange,提问作者mike ropri
相关产品推荐
相关产品推荐

