r - 在 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 循环,但我无法提出解决方案。你有任何代码来解决这个问题吗?
解决方案
您可以使用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
推荐阅读
- javascript - 更改按钮文本和按钮图标的位置
- python - 将数据作为 JSON 从 PHP 传递到 Python
- c# - 在“/u263a”上使用 WriteConsoleOutput 总是打印不正确
- dependencies - Elixir“注册表中找不到软件包::hackney”问题
- ssl - TLS 1.2 支持 camel-ftp 版本 2.17.0.redhat-630262 - Java 8
- camera - UIImage 选择器在我拍照并想使用它时给我一个黑屏
- python - 从一组列中检索第一个非 NA 值
- angular - 如何使用 InMemoryWebApi for Angular 发布?
- javascript - 如何在不同的javascript文件中调用类方法?
- c++ - C++ 特征减少比简单循环慢