簡體   English   中英

將條件應用於R中的多個列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM