2015-07-02 72 views
1
REF   ALT 
AT ATT,A,ATTT 

我正在与上面的数据帧工作,需要只包含ATREF列转换成0的整数,并且然后将含有ATT,A,ATTT1,2,3的​​柱,我尝试过变形,但它似乎没有工作。R A字符串转换成整数的数据帧中

而且我完全数据帧具有多行,所以我需要循环命令适用于所有的行。

任何帮助,将不胜感激

+1

目前还不清楚究竟是什么在你的其他行“完整的数据框“。你能给出更多的行,然后是你想要它们转换成什么样的例子吗?现在的问题无法回答。 –

+0

你有预设的想法,哪些项目应该有哪些数字?还是仅仅是连续做他们?如果ATTT再次出现,应该是3次还是不同的数字? –

+0

其他行在上面将具有相同的格式,REF列总是只有一个值.ACL列将会改变其包含的值的数量。这只是关于他们连续,所以如果ALT行包含AT,A它将成为1,2 ATT,AAA,ATTT将成为1,2,3,如果只有一个只有1 –

回答

0

设置REF列0很简单。

​​

对于​​专栏中,我认为为了让每个条目的问题,但行是独立的。因此A可以在一行中编号为1,而在另一行中编号为2(如果该行中有多个条目)。所以我们唯一关心的是每行中的替代品数量。我们可以简单地算来,并生成相应的数字载体,折叠成一个单一的字符串,以在数据帧中的相应条目:

df$ALT <- sapply(strsplit(df$ALT, ","), 
    function(alt) paste(1:length(alt), collapse=",")) 
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 

如果你不关心哪个字符串被分配到哪个号码,但你只是想不同的字符串有不同的intetger,你也可以这样做:

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.