我有一张如下表格。我喜欢在与第三个第一列进行比较时替换每个样本值,并使用(0,1,2,3)对每个值进行编码。例如,如果每行中的样本值= REF_REF - > 1;如果每行中的样本值= REF_ALT - > 2;如果每行中的样本值= ALT_ALT - > 3和0/0 - > 0
REF_REF REF_ALT ALT_ALT sample1 sample2 sample3
A/A A/G G/G 0/0 A/G G/G
T/T T/C C/C T/T T/C T/C
C/C C/G G/G 0/0 C/G C/G
我喜欢制作如下表格:
REF_REF REF_ALT ALT_ALT sample1 sample2 sample3
A/A A/G G/G 0 2 3
T/T T/C C/C 1 2 2
C/C C/G G/G 0 2 2
另外,我使用了这个命令但没有工作。
l=c()
for (i in seq_along(data))
{
data=data[1,]
Ref_Ref=data$Ref_Ref
Alt_Alt=data$Ref_Ref
Ref_Alt=data$Ref_Alt
with( data[], ifelse( data == Ref_Ref, 1, ifelse(data == Alt_Alt, 3,
if((data==Ref_Alt) 2))))
if(data=Ref_Ref, data=1)
l[1,]=if(data==Ref_Ref, 1)
l[1] <- if (data %in% data$Ref_Ref) 1 else if (data %in% data$Alt_Alt) 3 else if (data %in% data$Alt_Alt) 2 else 0
}
答案 0 :(得分:2)
这可能适合你。它按行拆分数据,并使用R中因子的有用属性。对于每一行,我们在样本中创建一个因子,级别为0/0,后跟ref_ref,ref_alt和alt_alt。然后我们将此因子转换为数字,并减去1以获得所需的输出。
recoded_samples <- apply(dat,1,function(x) {
res <- as.numeric(factor(x[4:6],levels = c("0/0",x[1:3]))) - 1
res
})
然后我们可以将dat复制到结果变量(我不喜欢覆盖变量),并替换列。请注意,我们需要转置&#39; res&#39;。
outcome <- dat
outcome[,4:6] <- t(res)
> outcome
REF_REF REF_ALT ALT_ALT sample1 sample2 sample3
1 A/A A/G G/G 0 2 3
2 T/T T/C C/C 1 2 2
3 C/C C/G G/G 0 2 2
答案 1 :(得分:0)
虚拟方法。
text1 <- "REF_REF REF_ALT ALT_ALT sample1 sample2 sample3
A/A A/G G/G 0/0 A/G G/G
T/T T/C C/C T/T T/C T/C
C/C C/G G/G 0/0 C/G C/G"
df <- read.table(text=text1, head=T, as.is=T)
for (x in 4:ncol(df)) {
df[,x][df[,x]=="0/0"] <- 0
df[,x][df[,x]==df[,1]] <- 1
df[,x][df[,x]==df[,2]] <- 2
df[,x][df[,x]==df[,3]] <- 3
}
# change characters to integers
df[,4:6] <- as.integer(as.matrix(df[, 4:6]))
df