【问题标题】:assigning row names to column names based on highest percentage根据最高百分比将行名分配给列名
【发布时间】:2018-05-14 08:07:23
【问题描述】:
voyages =(
VIC0016,
VIC0016,
VIC0016,
VIC0016,
VIC0016,
VIC0016,
Truck,
VIC0016,
VIC0016,
VIC0016,
JUL0983,
BB11356,
VIC0022,
VIC0022,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981,
ISK1981)

clusters = (5,
5,
5,
4,
4,
4,
1,
3,
4,
3,
5,
2,
4,
5,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6)

>calculate.confusion <- function(voyages, clusters)  
{
  d <- data.frame(voyages, clusters)  
  td <- as.data.frame(table(d))  
  # convert the raw counts into percentage of each voyage number  
  pc <- matrix(ncol=max(clusters),nrow=0)  
  for (i in 1:11) # 11 different voyage numbers  
  {  
    total <- sum(td[td$voyages==td$voyages[i],3])   
    #,3 is the third column, showing the frequencies  
    pc <- rbind(pc, td[td$voyages==td$voyages[i],3]/total)  
  }   
  rownames(pc) <- td[1:11,1]  
  colnames(pc)<-1:11  
  return(pc)  
}  

有了上面的数据框(数字是百分比),我怎样才能用行的名称替换列名 [1:11],这样:

  • 在行内,该行中百分比最高的列以该行命名
  • 每个行名都使用一次

希望有人可以帮助我。

【问题讨论】:

  • 不要将您的数据作为图像发布,请参阅上面的链接,了解如何提供可重现的示例。
  • 数据框是k表示聚类后的混淆矩阵,转化为百分比

标签: r cluster-analysis percentage rowname


【解决方案1】:

这应该会有所帮助:

# sample data
df <- data.frame(a = c(1,2,3), b = c(3,2,1), c = c(2,3,1))
colnames(df)
# [1] "a" "b" "c"
for(i in 1:nrow(df)) {colnames(df)[df[i, ] == max(df[i, ])] <- rownames(df)[i]}
colnames(df)
# [1] "3" "1" "2"

【讨论】:

  • 亲爱的,当我尝试这个时,并不是所有的航次号都被使用了,有些被使用了两次。此外,包含最高百分比的列并不总是给出该航次的名称。有没有办法解决这个问题?
  • 总有办法。请尝试提出更具体的问题以获得更具体的答案(提供独立运行的示例)。见stackoverflow.com/questions/5963269/…
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多