r - 为R中矩阵中列中的每个值提取列名
问题描述
我有以下矩阵:
r1 <- c("M","A","T","D","T","Y")
r2 <- c("M","A","G","G","T", "J")
r3 <- c("M","B","H","G","T", "Y")
r4 <- c("M","B","G","G","X", "Y")
r5<- c("F","A","H","D","T", "Y")
n.mat <- rbind(r1,r2,r3,r4,r5)
n.mat<-as.data.frame(n.mat)
我想为列中的每个唯一值提取列名作为向量。目前列名是:V1 V2 V3 V4 V5 V6
输出应如下所示:
V1_M V1_F V2_A V2_B V3_T V3_G V3_H V4_D V4_G V5_T V5_X V6_Y V6_J
顺序应该是唯一值从上到下出现在列中的顺序。
我的代码:
apply(n.mat,2,FUN = function(x) paste(unique(x), seq_along(x), sep = '_'))
但这仅转换矩阵中的值而不转换列名,也不会将其作为向量输出。
解决方案
我们可以通过使用索引 licating 列名paste
来以矢量化方式使用,然后使用 the 的值获取after ing (它是after - 所以我们使用了)rep
col
unique
paste
n.mat
data.frame
as.data.frame
unlist
unique(paste(colnames(n.mat)[col(n.mat)], unlist(n.mat), sep="_"))
-输出
[1] "V1_M" "V1_F" "V2_A" "V2_B" "V3_T" "V3_G" "V3_H" "V4_D"
[9] "V4_G" "V5_T" "V5_X" "V6_Y" "V6_J"
或者如果需要循环,请使用Map
unlist(Map(function(x, y) unique(paste(y, x, sep = "_")),
unname(n.mat), names(n.mat)))
在这里apply
不起作用,因为names
对于每一列将是 row.names 属性(即使将 OP 的代码更改为names
)
推荐阅读
- reactjs - 安装时调用 componentWillUnmount() - React.js
- c - 从文件中的特定位置读取特定数据(C)
- ios - 如何通过电子邮件将 JSON 转换为 CSV 作为附件 Ionic 3
- azure - API 管理和应用程序认证
- php - 更新用户记录时创建日志记录
- r - 在数据框中创建新的标识符列,其值来自包含嵌套列表的名称
- ios - 带有标题和图像的 UIButton,系统选择的背景不包括图像
- android - 关于移动应用方案深度链接的问题
- android - 向 Android 设备发送数据 向 IOS 设备发送通知
- angular - 如何在 Angular 6 中使用全局组件