【问题标题】:Use values and not labels when manipulating datasets in R's data.table在 R 的 data.table 中操作数据集时使用值而不是标签
【发布时间】:2021-04-25 18:07:25
【问题描述】:

所以我一直在尝试使用data.table 操作数据集。就像在STATA 中一样,我想使用它们的值而不是标签对我的因素进行分类。我觉得这对于处理具有非常奇怪标签和大量空格的分类变量时要安全得多。

到目前为止,我还无法在R 中执行此操作。这是可能的还是我错过了什么?

我附上了一个虚拟代码来重现这个问题。

install.packages("data.table")
library(data.table)

classmates
# dummy data 
school_friends <-data.table(names = as.factor(c("Beth", "Ben", "Andrew","Amy", "Claire","Ahmed", "Moses", "Jose", "Ibrahim", "Rachel")
                                              ), 
                            age = c(19,18,19,19,20,19,19,17,18,19))
                        
str(school_friends)

# categorise dataset
school_friends[names==1 | 
               names==4 |
               names==5 |
               names==10,
               sex:=1]

school_friends[names==2 |
               names==3 |
               names==6 |
               names==7 |
               names==8 |
               names==9,
               sex:=2]
# labels levels
school_friends$sex <- factor(school_friends$sex, levels = c(1,2), 
                             labels = c("Boy", "Girl"))

STATA 中这样做就像这样直截了当:

# create new categories 
gen sex=.
replace sex=0 if names==1 | names==4 | names==5 | names==10
replace sex=1 if names==2 | names==3 | names==6 | names==7 | names==8 | names==9 
# label categories 
label define edulab 0 "Boy" 1 "Girl"
label values edu edulab

【问题讨论】:

    标签: r data.table data-manipulation


    【解决方案1】:

    一种可能的方法是像这样使用级别函数:

    school_friends[names%in%levels(school_friends$names)[1:2],sex:=1]
    

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多