根据R中其他变量的值重命名分类变量

时间:2016-04-27 02:33:16

标签: r

我有一个像这样的样本数据集'a':

> a
  group marks  upd class
1     T     2   up     A
2     C     3   up  <NA>
3     C     4 down     B
4     T     5   up  <NA>
5     T     6 down     D
6     C     7   up  <NA>
7     T     1 down  <NA>
8     T     0 down     G

这里对于每个组(T或C),'class'变量中有记录,其值为null。现在对于每个类都为null的每个组,我希望该组分别重命名为T-NULL或C-NULL。如果组(T或c)在'class'中有一些值,则组名应该是原样。我们如何在R中为此编写代码?

2 个答案:

答案 0 :(得分:1)

我们可以使用data.table。根据'class'中NA值的逻辑条件,将'data.frame'转换为'data.table',我们paste将NULL字符串转换为'group'列并赋值(:=)修改后的字符串为'group'

library(data.table)
setDT(a)[is.na(class), group := paste(group, "NULL", sep="-")]
a
#    group marks  upd class
#1:      T     2   up     A
#2: C-NULL     3   up    NA
#3:      C     4 down     B
#4: T-NULL     5   up    NA
#5:      T     6 down     D
#6: C-NULL     7   up    NA
#7: T-NULL     1 down    NA
#8:      T     0 down     G

或使用base R

a$group[is.na(a$class)] <- paste(a$group[is.na(a$class)], "NULL", sep="-")

注意:我们假设'group'列为character类。如果是factor类,则可以使用转换为character类(as.character或使用stringsAsFactors=FALSE时读取数据集)或添加'C-NULL'和' T-NULL'为levelsfactor,然后分配修改后的字符串。

答案 1 :(得分:1)

试试这个

a$group = paste0(a$group, ifelse(is.na(a$class), "-NULL", ""))