如何使用分隔符在数据框中连接两个新的数字列?

时间:2016-10-10 01:03:04

标签: python r

我有数据帧df:

start   end
836 845
3341    3350
4647    4661
4932    4942
10088   10098
13679   13690
16888   16954
20202   20225

现在我需要第三列“JoinedCol”作为

836:845
3341:3350
4647:4661
4932:4942
10088:10098
...
...

我不想使用paste(),因为它正在使用char-type或factor生成列。我想在R中使用新列“JoinedCol”来获取像

这样的数据
836, 837,838,...844,845,3341,3342........ ..... 10098

2 个答案:

答案 0 :(得分:0)

据我所知,你不能在R中拥有这种类型的数据。 如果你加入':'对任何数字的符号,新字符串将始终是因子,字符或矩阵。

要从特定列中检索数据,您必须指定所需的部分,然后使用substring()。否则,您必须将两个数字放在不同的列中,就像原始数据帧一样。

但是,您可以使用新的JoinedCol:

获取数据
>DF$JoinedCol=paste(DF$start,DF$end, sep=":") #Create the new column as you say

DF
  start   end  JoinedCol
1   836 10088  836:10088
2   845 10098  845:10098
3  3341 13679 3341:13679
4  3350 13690 3350:13690
5  4647 16888 4647:16888
6  4661 16954 4661:16954
7  4932 20202 4932:20202
8  4942 20225 4942:20225
>substring(DF$JoinedCol,1,((regexpr(":", DF$JoinedCol))-1)) #To get first set of numbers (before the ':')

[1] "836"  "845"  "3341" "3350" "4647" "4661" "4932" "4942"
>substring(DF$JoinedCol,(regexpr(":", DF$JoinedCol))+1,nchar(DF$JoinedCol)) #To get second set of numbers (after the ':')

[1] "10088" "10098" "13679" "13690" "16888" "16954" "20202" "20225"

答案 1 :(得分:0)

基于

  

我想使用新列“JoinedCol”在R中进一步使用   获取数据,如836,837,838,... 844,845,3341,3342 ........ .....   10098

你真的想要这个:

DF <- read.table(text = "start   end
                      836 845
                 3341    3350
                 4647    4661
                 4932    4942
                 10088   10098
                 13679   13690
                 16888   16954
                 20202   20225", header = TRUE)

#create the sequences
DF$sequences <- Map(`:`, DF$start, DF$end)

#access the first sequence
DF$sequences[[1]]
#[1] 836 837 838 839 840 841 842 843 844 845

您不应该像文本那样创建命令,然后根据您的问题提出解析。