我有一个像这样的样本数据集'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中为此编写代码?
答案 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'为levels
到factor
,然后分配修改后的字符串。
答案 1 :(得分:1)
试试这个
a$group = paste0(a$group, ifelse(is.na(a$class), "-NULL", ""))