首页 > 解决方案 > 在 R 中使用 for 和 If 循环来转换数据

问题描述

我正在尝试将我的矩阵转换为 R 中的另一种格式,但由于我没有太多的 for/if 循环编码经验,所以我失败了。任何帮助表示赞赏。

我的矩阵的演示如下:

S   K1  K1  K2  K2  K3  K3  K4  K4  K5  K5   
1   A   P   A   A   A   A   P   A   A   A   
2   A   A   A   A   A   A   A   A   P   P   
3   A   P   A   A   A   A   P   A   A   A   
4   A   P   A   A   A   A   P   A   A   A   
5   A   P   A   A   A   A   A   A   P   A

A=缺席 P=现在

我想检索当前列的列名并打印它们。每个样本有 2 P 列。所以最终结果应该是

S   V1  V1  
1   K1  K4      
2   K5  K5      
3   K1  K4      
4   K1  K4  
5   K1  K5  

我知道这是一个简单的 for/if 循环,但我无法提出解决方案。你有任何代码来解决这个问题吗?

标签: r

解决方案


您可以使用data.table

library(data.table)
setDT(melt(df,1))[value=="P"][order(S),as.list(sub("[.].*","",variable)),by=S]
   S V1 V2
1: 1 K1 K4
2: 2 K5 K5
3: 3 K1 K4
4: 4 K1 K4
5: 5 K1 K5

推荐阅读