为R

时间:2018-04-18 13:35:20

标签: r data.table

我有一个如下所示的数据表:

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循环(?),在所有种类列中执行相同的功能?

我觉得答案可能很明显,但不是我的意思!任何帮助将不胜感激。

2 个答案:

答案 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]