重复样本ID/结果,并使用R重新编码为唯一和缺失
我有一个由样本ID和相应的结果变量组成的数据集。但是,我的数据集中有一些重复的示例ID。我想做的是识别重复的样本ID,并将此样本ID重新编码为唯一名称,然后将结果变量重新编码为缺失。我知道删除整行会更容易,但我需要保留行数 所以我有这样一个数据集:重复样本ID/结果,并使用R重新编码为唯一和缺失,r,R,我有一个由样本ID和相应的结果变量组成的数据集。但是,我的数据集中有一些重复的示例ID。我想做的是识别重复的样本ID,并将此样本ID重新编码为唯一名称,然后将结果变量重新编码为缺失。我知道删除整行会更容易,但我需要保留行数 所以我有这样一个数据集: dt<- data.frame(ID=c("A", "B", "A", "C"), Outcome=c("1", "1", "1", "1")) dt1<- data.frame(ID=c("A", "B", "A.1", "C"),
dt<- data.frame(ID=c("A", "B", "A", "C"), Outcome=c("1", "1", "1", "1"))
dt1<- data.frame(ID=c("A", "B", "A.1", "C"), Outcome=c("1", "1", "-9", "1"))
dt数据集列为factor
class。我将在data.frame
调用中使用stringsAsFactors=FALSE
创建类为“character”的非数字列。原因是,如果我们要更改“因子”类中的某些值/替换某些级别,我们需要将该新“值”作为该“因子”的“级别”之一。为了避免这种情况,我将已经存在的“factor”列转换为“character”。在本例中,两列都是“factor”类。因此,我们使用lappy
循环遍历“dt”列,并将列更改为“character”(as.character
)
在我们将“ID”转换为唯一的
ID之后,我们可以检查该列中的
,并将“结果”列中的相应元素替换为-9
dt$Outcome[grep('[.]', dt$ID)] <- -9
dt
# ID Outcome
#1 A 1
#2 B 1
#3 A.1 -9
#4 C 1
你考虑过或尝试过什么?问题是什么?如果你在一些名字中已经有合法的点,grep
是危险的。相反,在原件上使用重复的检查<代码>转换(dt,ID=make.unique(as.character(ID)),结果=ifelse(重复的(ID),-9,结果))
dt$ID <- make.unique(dt$ID)
dt$Outcome[grep('[.]', dt$ID)] <- -9
dt
# ID Outcome
#1 A 1
#2 B 1
#3 A.1 -9
#4 C 1
transform(dt,
ID=make.unique(as.character(ID)), #change the ID column
Outcome=ifelse(duplicated(ID),-9, Outcome)) #change Outcome