R数据表格,将每个单元格的值替换为1,如果大于0

3

我有一个 R data.table,共有 25 列,第一列是 ID,24 列是整数变量。总共有接近100万行数据。我该如何将所有非零值转换为1?

Custid  A   B  C
123     0   8  0
124     0   0  6

Should become

Custid  A   B  C
123     0   1  0
124     0   0  1
3个回答

5
假设您的data.table叫做“dt”,
df = as.data.frame(dt)
df[,-1] = (df[,-1] != 0)*1

这段代码的作用是:将数据表转换成向量(vector),-1索引表示不包含第一列,括号内部返回一个真或假的语句,而*1则确保结果以数字形式返回。

如果需要,您可以将其转回数据表(data.table)格式。

dt = data.table(df)

4

一种高效的选项是使用set函数进行就地替换。使用for循环遍历列,并通过指定j索引,将“value”设置为1,其中元素不等于0。

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)]

1
那个运行得够快的。一看到那个for循环,我就失去了希望。但是结果还不错,谢谢。 - Pavan Ebbadi

1
这应该也可以工作。
apply(df, 1, function(x) {ifelse(any(x > 0), 1, 0)})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接