首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从概率矩阵生成10 0矩阵

如何从概率矩阵生成10 0矩阵
EN

Stack Overflow用户
提问于 2020-09-02 22:17:14
回答 2查看 57关注 0票数 1

我有一个概率矩阵,看起来是这样的:

代码语言:javascript
复制
ID  V1     V2         V3        V4
1  0.15     0.1        0.5     0.25
2.  0       0.1        0.3.     0.6
3.  0.2.    0.25.        0.2.     0.35

我想把它转换成一个1,0矩阵,其中最大的概率分配为1,其余的矩阵为0:

代码语言:javascript
复制
ID  V1     V2         V3        V4
1   0       0          1         0
2.  0       0.         0.        1
3.  0.      0          0         1

如何编写函数来完成任务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-02 22:18:20

如果是按行计算,则使用pmax获取pmax值,并与dataset进行比较。

代码语言:javascript
复制
df1[-1] <- +(df1[-1] == do.call(pmax, df1[-1]))
df1
#  ID V1 V2 V3 V4
#1  1  0  0  1  0
#2  2  0  0  0  1
#3  3  0  0  0  1

或使用apply

代码语言:javascript
复制
df1[-1] <- t(apply(df1[-1], 1, function(x) +(x == max(x))))

数据

代码语言:javascript
复制
df1 <- structure(list(ID = c(1, 2, 3), V1 = c("0.15", "0", "0.2."), 
    V2 = c("0.1", "0.1", "0.25."), V3 = c("0.5", "0.3.", "0.2."
    ), V4 = c(0.25, 0.6, 0.35)), class = "data.frame", 
    row.names = c(NA, 
-3L))
票数 4
EN

Stack Overflow用户

发布于 2020-09-03 00:23:37

我们可以使用max.col,它返回每行中最大值的索引。

代码语言:javascript
复制
#Create a copy of df
df2 <- df
#turn all values to 0
df2[-1] <- 0
#Get the max column number in each row and turn those values to 1
df2[cbind(1:nrow(df), max.col(df[-1]) + 1)] <- 1
df2

#  ID V1 V2 V3 V4
#1  1  0  0  1  0
#2  2  0  0  0  1
#3  3  0  0  0  1

数据

代码语言:javascript
复制
df <- structure(list(ID = 1:3, V1 = c(0.15, 0, 0.2), V2 = c(0.1, 0.1, 
0.25), V3 = c(0.5, 0.3, 0.2), V4 = c(0.25, 0.6, 0.35)), 
class = "data.frame", row.names = c(NA, -3L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63714232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档