相关疑难解决方法(0)

在data.table中对因子级别进行分组

我正在尝试将因子水平结合起来data.table并想知道是否存在data.table这样做的方法.

例:

DT = data.table(id = 1:20, ind = as.factor(sample(8, 20, replace = TRUE)))
Run Code Online (Sandbox Code Playgroud)

我想说类型1,3,8属于A组; 2和4属于B组; 和5,6,7在C组.

这就是我一直在做的事情,这个问题的完整版本速度很慢:

DT[ind %in% c(1, 3, 8), grp := as.factor("A")]
DT[ind %in% c(2, 4), grp := as.factor("B")]
DT[ind %in% c(5, 6, 7), grp := as.factor("C")]
Run Code Online (Sandbox Code Playgroud)

这个相关问题提出的另一种方法,我猜这样翻译:

DT[ , grp := ind]
levels(DT$grp) = c("A", "B", "A", "B", "C", "C", "C", "A")
Run Code Online (Sandbox Code Playgroud)

或许(考虑到我有65个基础组和18个聚合组,这感觉有点整洁)

DT[ , grp := ind]
lev <- letters(1:8)
lev[c(1, 3, 8)] <- "A"
lev[c(2, 4)] <- "B" …
Run Code Online (Sandbox Code Playgroud)

r data.table

4
推荐指数
1
解决办法
5927
查看次数

嵌套ifelse:改进的语法

描述

ifelse() 函数允许通过一系列测试过滤向量中的值,每个测试都会产生不同的操作.例如,xx设为data.frame,如下所示:

xx <- data.frame(a=c(1,2,1,3), b=1:4)
xx
Run Code Online (Sandbox Code Playgroud)

ab
1 1
2 2
1 3
3 4

假设您要从列b创建新列c,但是根据以下方式列a中的值:

对于每一行,

  • 如果列a中的值为1,则列c中的值与列b中的值相同.
  • 如果列a中的值为2,则列c中的值是列b中值的100倍.
  • 在任何其他情况下,列c中的值是列b中值的负数.

使用ifelse(),解决方案可能是:

xx$c <- ifelse(xx$a==1, xx$b, 
               ifelse(xx$a==2, xx$b*100,
                      -xx$b))
xx
Run Code Online (Sandbox Code Playgroud)

abc
1 1
2 2 2 200
1 3 3
3 4 -4

问题1

当测试数量增加时,例如四个测试会出现美学问题:

xx$c <- ifelse(xx$a==1, xx$b, 
           ifelse(xx$a==2, xx$b*100,
                  ifelse(xx$a==3, ..., …
Run Code Online (Sandbox Code Playgroud)

syntax if-statement nested r vectorization

4
推荐指数
2
解决办法
507
查看次数

这个 data.table R 代码有一个简洁/最简单的方法吗?

OECD 数据中的 STRATUM 太长,为了简单起见,我使用了这个名称,并希望将其简化为更短和更精确的命名,如下面的代码所示。

pisaMas[,`:=`
             (SchoolType = c(ifelse(STRATUM == "National Secondary School", "Public", 
                                    ifelse(STRATUM == "Religious School", "Religious", 
                                           ifelse(STRATUM == "MOE Technical School", "Technical",0)))))]
pisaMas[,table(SchoolType)]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个简单的方法来解决这个问题,使用 data.table 包。

if-statement r rename gsub data.table

4
推荐指数
1
解决办法
889
查看次数

标签 统计

r ×3

data.table ×2

if-statement ×2

gsub ×1

nested ×1

rename ×1

syntax ×1

vectorization ×1