基于R中其他变量的值重命名分类变量

基于R中其他变量的值重命名分类变量,r,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>

我有一个样本数据集“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
>a
upd组分数
1吨2升1吨
2c3以上
3 C 4向下B
4吨5升
5 T 6向下D
6C7以上
7吨1下
8吨0克

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

我们可以使用
data.table
。根据“类”中NA值的逻辑条件,将“data.frame”转换为“data.table”,我们将空字符串粘贴到“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="-")

a$group[is.na(a$class)]我们可以使用
data.table
。根据“类”中NA值的逻辑条件,将“data.frame”转换为“data.table”,我们将空字符串粘贴到“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="-")
a$group[is.na(a$class)]试试这个

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

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

(1) 你试过什么?(2)
组是因子还是字符?(3) 分组在这里似乎并不重要。(4) 请提供一个可复制的例子。(1)你尝试过什么?(2) 
组是因子还是字符?(3) 分组在这里似乎并不重要。(4) 请提供一个可复制的示例。最后一个示例对于任何数量的组值都是非常好的解决方案。很好@Gopala
数据。表
分配会很快,因为它发生在原地。同意,尽管我不使用它们。在数据帧上使用
dplyr
。最后一个对于任意数量的组值都是一个很好的解决方案。很好@Gopala
数据。表
分配会很快,因为它发生在原地。同意,尽管我不使用它们。在数据帧上使用
dplyr
。如果只粘贴相关值,则将时间粘贴为零似乎是一种浪费。如果只粘贴相关值,则将时间粘贴为零似乎是一种浪费。