我有数据帧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
答案 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
您不应该像文本那样创建命令,然后根据您的问题提出解析。