生产基于优先级列表

新列有类似的优先级列表:从一个二进制数据帧像下面生产基于优先级列表

Google: High priority 

Yahoo: medium priority

Microsoft: low priority

> df <- data.frame(id = c(1,2,3), Google = c(1,1,0), Yahoo = c(1,1,1), Microsoft = c(0,1,1)) 

> df

id Google Yahoo Microsoft

1 1 1 1 0

2 2 1 1 1

3 3 0 1 1

怎么可能产生一个新的数据框在其中列是相同的,但取决于优先级,只有具有最高优先级的列有1保留,而另一列在每一行中取0。预期结果的

例子:

> df <- data.frame(id = c(1,2,3), Google = c(1,1,0), Yahoo = c(0,0,1), Microsoft = c(0,0,0)) 

> df

id Google Yahoo Microsoft

1 1 1 0 0

2 2 1 0 0

3 3 0 1 0

回答:

使用:

mc <- max.col(df[-1], ties.method = 'first') 

df[-1] <- 0

df[cbind(1:nrow(df), mc + 1)] <- 1

给出:

> df 

id Google Yahoo Microsoft

1 1 1 0 0

2 2 1 0 0

3 3 0 1 0

如果公司列不在优先顺序,可以改变:

回答:

我们也可以使用apply功能:

df[-1]= t(apply(df[-1], 1, function(x)`[<-`(x,-which.max(x),0))) 

df

id Google Yahoo Microsoft

1 1 1 0 0

2 2 1 0 0

3 3 0 1 0

以上是 生产基于优先级列表 的全部内容, 来源链接: utcz.com/qa/266838.html

回到顶部