我有一个如下所示的数据表:
library(data.table)
Well <- c("A1", "A2", "A3", "A4", "A5")
Episyrphus <- c(0,0,5,3,1)
Eupeodes <- c(2,0,4,1,0)
Syrphus <- c(0,4,0,3,2)
dt <- data.table(Well, Episyrphus, Eupeodes, Syrphus)
dt
Well Episyrphus Eupeodes Syrphus
1: A1 0 2 0
2: A2 0 0 4
3: A3 5 4 0
4: A4 3 1 3
5: A5 1 0 2
我想要做的是将物种列(Episyrphus,Eupeodes,Syrphus)中的所有非零值更改为1,以便表格变为:
Well Episyrphus Eupeodes Syrphus
1: A1 0 1 0
2: A2 0 0 1
3: A3 1 1 0
4: A4 1 1 1
5: A5 1 0 1
然而,我的问题是我还没能用几列替换非零的非零。我已达到单列的解决方案是:
dt[Episyrphus > 0, Episyrphus := 1L]
但有没有办法使用这个相同的代码结构,可能还有for循环(?),在所有种类列中执行相同的功能?
我觉得答案可能很明显,但不是我的意思!任何帮助将不胜感激。
答案 0 :(得分:1)
这是dplyr
方法
dt %>% dplyr::mutate_if(is.numeric, funs(sign(.)))
# Well Episyrphus Eupeodes Syrphus
# 1 A1 0 1 0
# 2 A2 0 0 1
# 3 A3 1 1 0
# 4 A4 1 1 1
# 5 A5 1 0 1
答案 1 :(得分:0)
你可以做到
cols <- seq(ncol(dt))[-1]
dt[ , (cols) := lapply(.SD, as.logical), .SDcols = cols]