我有R data.table 共有25列,第1列是ID,24列是整数变量。有近1M亿行。如何将所有这些非零值转换为1
Custid A B C
123 0 8 0
124 0 0 6
应该成为
Custid A B C
123 0 1 0
124 0 0 1
答案 0 :(得分:5)
假设您的data.table被称为'dt',
df = as.data.frame(dt)
df[,-1] = (df[,-1] != 0)*1
的工作原理。 -1
索引表示不包含第一列,然后在括号内返回true或false语句,*1
确保以数字形式返回结果。
如果您愿意,可以将其转回data.table。
dt = data.table(df)
答案 1 :(得分:3)
一个有效的选项是set
函数,它可以替换。使用for
循环遍历列,并将set
'value'循环到1,其中元素不等于0,指定'i'和'j'索引。
for(j in 2:ncol(dt)){
set(dt, i= which(dt[[j]]!=0), j=j, value =1)
}
dt
# Custid A B C
#1: 123 0 1 0
#2: 124 0 0 1
或者lapply
的另一个选项是在指定.SDcols
dt[, names(dt)[-1] := lapply(.SD, function(x) as.integer(x!=0)), .SDcols = 2:ncol(dt)]
答案 2 :(得分:1)
这也应该有用
apply(df, 1, function(x) {ifelse(any(x > 0), 1, 0)})