gpt4 book ai didi

r - 为 R 中矩阵的列中的每个值提取列名称

转载 作者:行者123 更新时间:2023-12-05 02:37:52 25 4
gpt4 key购买 nike

我有以下矩阵:

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 = '_'))

但这只会转换矩阵中的值而不是列名,也不会将其输出为向量。

最佳答案

我们可以通过rep将列名与col索引以向量化的方式使用paste,然后得到uniquepaste 之后使用 n.mat 的值(它是 as.data 之后的 data.frame。 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)

关于r - 为 R 中矩阵的列中的每个值提取列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69875793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com