我有一個數據幀每行一個值,可能在幾列之一。我如何創建一個包含1所在列號的列?我想用dplyr來做到這一點,但我能想到的唯一方法是循環,這看起來很不像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
我有一個數據幀每行一個值,可能在幾列之一。我如何創建一個包含1所在列號的列?我想用dplyr來做到這一點,但我能想到的唯一方法是循環,這看起來很不像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()
的矩陣。
我們也可以做
as.matrix(df) %*%seq_along(df)
# [,1]
#[1,] 1
#[2,] 2
#[3,] 2
#[4,] 3
which(df==1, arr.ind=T)
# row col
# [1,] 1 1
# [2,] 2 2
# [3,] 3 2
# [4,] 4 3
真棒感謝。當我看到你的第一篇文章時,我使用了:矩陣(max.col(df),ncol = 1)' – Rilcon42