我有以下矩陣:
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 = '_'))
但這僅轉換矩陣中的值而不轉換列名,也不將其作為向量輸出。
uj5u.com熱心網友回復:
我們可以paste通過rep將列名與col索引連接起來以矢量化的方式使用,然后使用 the 的值獲取uniqueafter (它是after - 所以我們使用了)pasten.matdata.frameas.data.frameunlist
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)
uj5u.com熱心網友回復:
我們可以使用Mapakrun 已經建議并將名稱粘貼到值中。之后檢索唯一值作為向量:
n.mat[] <- Map(paste, names(n.mat), n.mat, sep = '_')
as.character(unique(unlist(n.mat)))
輸出:
[1] "V1_M" "V1_F" "V2_A" "V2_B" "V3_T" "V3_G" "V3_H" "V4_D" "V4_G" "V5_T"
[11] "V5_X" "V6_Y" "V6_J"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352286.html
標籤:r
下一篇:在Shiny中顯示數字最高的值
