IT序号网

将值重新编码为一列

JustinYoung 2024年11月01日 编程语言 57 0

我有一个数据框,每行一个值,可能在几列之一中。如何创建包含 1 所在列号的单个列?我想使用 dplyr 来做到这一点,但我能想到的唯一方法涉及 for 循环,这似乎与 R 很不一样。

df<-data.frame( 
  a=c(1,0,0,0), 
  b=c(0,1,1,0), 
  c=c(0,0,0,1) 
) 
 
  a b c 
1 1 0 0 
2 0 1 0 
3 0 1 0 
4 0 0 1 

目标:

1 1 
2 2 
3 2 
4 3 

请您参考如下方法:

这里不需要dplyr。这就是 max.col() 的用途。由于该行中的所有其他值都将为零,因此 max.col() 将为我们提供出现 1 的列号。

max.col(df) 
# [1] 1 2 2 3 

如果你需要一个列,那么

data.frame(x = max.col(df)) 
#   x 
# 1 1 
# 2 2 
# 3 2 
# 4 3 

cbind()matrix() 用于矩阵。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!