给定条件替换data.table中的所有值 [英] Replace all values in a data.table given a condition

查看:68
本文介绍了给定条件替换data.table中的所有值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定条件如何替换数据表中的所有值?

How would you replace all values in a data.table given a condition?

例如

ppp <- data.table(A=1:6,B=6:1,C=1:6,D=3:8)

A B C D
1 6 1 3
2 5 2 4
3 4 3 5
4 3 4 6
5 2 5 7
6 1 6 8

我要用NA替换所有 6

I want to replace all "6" by NA

A B C D
1 NA 1 3
2 5 2 4
3 4 3 5
4 3 4 NA
5 2 5 7
NA 1 6 8

我尝试过类似的操作

ppp[,ifelse(.SD==6,NA,.SD)]

但它不起作用,它产生的表要宽得多。

but it doesn't work, it produces a much wider table.

推荐答案

本机 data.table 的方式是:

for(col in names(ppp)) set(ppp, i=which(ppp[[col]]==6), j=col, value=NA)
# Test
> ppp
    A  B  C  D
1:  1 NA  1  3
2:  2  5  2  4
3:  3  4  3  5
4:  4  3  4 NA
5:  5  2  5  7
6: NA  1 NA  8

这种方法-也许更加冗长-仍然比 ppp [ppp == 6]<-NA 快得多,因为它避免了所有列的复制。

This approach - while perhaps more verbose - is nevertheless going to be significantly faster than ppp[ppp == 6] <- NA, because it avoids the copying of all columns.

这篇关于给定条件替换data.table中的所有值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆