【发布时间】:2019-03-12 10:57:14
【问题描述】:
我对 R 很陌生,所以我希望我的问题会很有趣。我想做的很简单。这是我的数据集的示例:
> head(belongliness)
ACTIVITY_X ACTIVITY_Y ACTIVITY_Z Event cluster1 cluster2 cluster3 cluster4
1: 40 47 62 Head-up 0.1900989 0.768225365 0.0160654667 0.025610279
2: 60 74 95 Head-up 0.5392218 0.038558310 0.0064671635 0.415752686
3: 62 63 88 Head-up 0.7953673 0.044981152 0.0067121719 0.152939414
4: 60 56 82 Head-up 0.9941016 0.002608879 0.0003007537 0.002988748
5: 66 61 90 Head-up 0.7027407 0.048318016 0.0079239680 0.241017291
6: 60 53 80 Head-up 0.9541378 0.023338896 0.0024442116 0.020079071
我想在"cluster 4" 列的右侧创建一个新列"winning cluster"。列"winning cluster" 将为每一行取列"cluster 1" 到"cluster 4" 中的最大值,并显示该列的索引名称。
对于第 1 行,cluster 2,对于第 2 行 cluster 1,对于第 3 行 cluster 1 等等。
感谢任何帮助!
【问题讨论】:
-
试试
belongliness[, winning_cluster := do.call(pmax, .SD), .SDcols = paste0("cluster", 1:4)](好像是data.table)。如果是data.framebelongliness$winng_cluster <- do.call(pmax, belongliness[grep("^cluster", names(belongliness))]) -
我使用了您的第一个选项:
results<-belongliness[, winning_cluster := do.call(pmax, .SD), .SDcols = paste0("cluster", 1:4)] View(results)但是这将显示每一行的最大值,而不是值标题的列名称。我清楚了吗? -
你想要列的名称,然后使用
max.col,即names(bellongliness)[max.col(belongliness[grep("^cluster", names(belongliness))])] -
@juansalix。我用给出的例子发布了一个对我来说很好的版本
标签: r