簡體   English   中英

如何在data.table的多個列中使用ifelse?

[英]How to use ifelse across multiple columns in a data.table?

我想在其中應用ifelse語句的data.table中有多個列。 我可以為每一列重復該代碼,但我想知道是否有更優雅的解決方案

對於給定的數據表,我想使用ifelse語句更改一些數字列。

數據如下:

dt = data.table(id = c(101, 102, 103, 104), one_cnt = c(0, 6, 4, 0), two_cnt = c(4, 0, 0, 2))

dt

如果我想手動執行此操作,則可以在所有列中執行此操作

dt$one_cnt = ifelse(dt$one_cnt == 0, 0, 2)

相反,我想選擇以下列,並在每個列上應用ifelse

colnames(dt)[grepl("cnt", colnames(dt))]

對於one_cnt和two_cnt,0值將以0結尾。非零值將采用1值。

我們可以使用.SDcols指定選定的列。

library(data.table)
cols <- grep("cnt", colnames(dt), value = TRUE)
dt[, (cols) :=  lapply(.SD, function(x) ifelse(x == 0, 0, 2)), .SDcols = cols]

dt
#    id one_cnt two_cnt
#1: 101       0       2
#2: 102       2       0
#3: 103       2       0
#4: 104       0       2

通過嘗試將0值替換為0並將非零值更改為2,但是在描述中提到要將非零值更改為1,因此我不清楚您的預期輸出。 如果要將其更改為1,可以執行

dt[, (cols) :=  lapply(.SD, function(x) as.integer(as.logical(x))), .SDcols = cols]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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