[英]Applying condition to multiple columns in R
我有一個數據集,它以虛擬變量的形式代表每個客戶的一個籃子。
例如:
P1 P2 P3 P4 P5
0 2 0 0 0
0 1 0 0 0
0 0 0 3 0
0 0 0 0 0
0 0 5 0 0
1 1 0 0 0
其中P1代表產品1,依此類推。
本質上,我想運行一個簡單的查詢,在其中我可以轉換所有超過1到1的值。這樣我的數據中只有1和0。 我能夠使用以下幾行來完成它:
df[(df$P1>1] <- 1
是否適用所有功能?
您可以轉換為邏輯矩陣,並通過用+
包裝來強制轉換為二進制。
+(df > 0)
# P1 P2 P3 P4 P5
#[1,] 0 1 0 0 0
#[2,] 0 1 0 0 0
#[3,] 0 0 0 1 0
#[4,] 0 0 0 0 0
#[5,] 0 0 1 0 0
#[6,] 1 1 0 0 0
或使用略慢的ifelse
ifelse(df > 0, 1, 0)
如果數據集非常大,則創建matrix
可能無法提高內存效率。 我們可以轉換為data.table
(假設初始數據集是data.frame
)並使用set
將值更改為1
library(data.table)
setDT(df)
for(j in seq_along(df)){
set(df, i= which(df[[j]] > 1), j=j, value=1)
}
df
# P1 P2 P3 P4 P5
#1: 0 1 0 0 0
#2: 0 1 0 0 0
#3: 0 0 0 1 0
#4: 0 0 0 0 0
#5: 0 0 1 0 0
#6: 1 1 0 0 0
這應該與您嘗試的相同:
df[df > 0] <- 1
df
P1 P2 P3 P4 P5
1 0 1 0 0 0
2 0 1 0 0 0
3 0 0 0 1 0
4 0 0 0 0 0
5 0 0 1 0 0
6 1 1 0 0 0
為什么不和class
一起玩:
`class<-`(!!df, "numeric")
# P1 P2 P3 P4 P5
#[1,] 0 1 0 0 0
#[2,] 0 1 0 0 0
#[3,] 0 0 0 1 0
#[4,] 0 0 0 0 0
#[5,] 0 0 1 0 0
#[6,] 1 1 0 0 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.