R将字符串转换为数据帧内的整数

时间:2015-07-02 11:36:44

标签: r

REF         ALT 
 AT  ATT,A,ATTT

我正在使用上面的数据框,需要将仅包含REF的{​​{1}}列转换为AT的整数,然后将0列包含{ {1}}进入ALT,我尝试过转换,但似乎无效。

此外,我的完整数据框有多行,因此我需要循环命令以应用于所有行。

非常感谢任何帮助

2 个答案:

答案 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=","))