REF ALT
AT ATT,A,ATTT
我正在使用上面的数据框,需要将仅包含REF
的{{1}}列转换为AT
的整数,然后将0
列包含{ {1}}进入ALT
,我尝试过转换,但似乎无效。
此外,我的完整数据框有多行,因此我需要循环命令以应用于所有行。
非常感谢任何帮助
答案 0 :(得分:0)
R中的循环效率非常低,所以如果不是绝对必要的话,我会强烈反对它。在你的情况下,我认为没有必要。
例如,您可以这样做(假设您的数据框名为“df”):
df$REF<-0 # from what I gather all rows should be 0
df$ALT2<-1 # a proxy column that you can copy to ALT after
df$ALT2[df$ALT == "A"] <-2 # converts A to 2
df$ALT2[df$ALT == "ATTT"] <-3 # converts ATTT to 2
df$ALT<-df$ALT2 # copy proxy over to ALT
df$ALT2<-NULL #erase proxy column
如果您不关心将哪个字符串分配给哪个号码,但您只想让不同的字符串具有不同的整数,您也可以这样做:
df$REF<-0 # from what I gather all rows should be 0
df$ALT <- as.numeric(factor(df$ALT)) # give a distinct number to each distinct string counting up from 1.
答案 1 :(得分:0)
将REF
列设置为0非常简单。
df$REF <- 0
对于ALT
列,我假设每个条目的顺序都很重要,但行是独立的。因此A
可以在一行中编号为1但在另一行中编号为2(如果该行中有多个条目)。因此,我们唯一关心的是每行中的替代品数量。我们可以简单地计算它们并生成具有适当数字的向量,将它们折叠成单个字符串以在数据框中形成相应的条目:
df$ALT <- sapply(strsplit(df$ALT, ","),
function(alt) paste(1:length(alt), collapse=","))