如何根据 R 列中的字母和数字字符对象在 data.frame 中创建新列
How to create new columns in data.frame based on letter AND number character objects in a column in R
我有一个数据框,其中有一列填充了这样的数据,在染色体上,然后是碱基位置,都在一列中。我用整数填充了剩余的 V2 到 V5 列,只是为了模拟类似的 data.frame.
> test
V1 V2 V3 V4 V5
1 I.1286480 9 17 25 33
2 I.1898932 10 18 26 34
3 I.11871397 11 19 27 35
4 II.1252994 12 20 28 36
5 II.18175911 13 21 29 37
6 III.10298347 14 22 30 38
7 IV.123478912 15 23 31 39
8 V.12837471234 16 24 32 40
以下列中的其他数据。这是一个巨大的数据集,有 115,000 行。我想创建两个新列,一个包含罗马数字(I、II、III、IV、V),另一列包含罗马数字后面的数字。我遇到的问题是这是一个字符对象向量,所以我不确定如何从数字中解析出字母。我尝试使用 DescTools 包中的 StrPos,但是
> StrPos(test$V1, "I")
[1] 1 1 1 1 1 1 1 NA
> StrPos(test$V1, "I.")
[1] 1 1 1 1 1 1 1 NA
它 returns 所有 "I" 的位置,而不仅仅是具有一个 "I" 实例的对象。我想知道 substring
是否可行?但是后来我遇到了所有罗马数字长度不同的问题,以及罗马数字后面的数字长度也不同。我知道这个问题一定有一个简单的解决方案,但我唯一能想到的就是很长的 for
和 if
循环。帮助我,Whosebug,你是我唯一的希望!
使用 tidyr
中的 separate
:
library(tidyr)
separate(test, V1, into = c("chr", "pos"))
chr pos V2 V3 V4 V5
1 I 1286480 9 17 25 33
2 I 1898932 10 18 26 34
3 I 11871397 11 19 27 35
4 II 1252994 12 20 28 36
5 II 18175911 13 21 29 37
6 III 10298347 14 22 30 38
7 IV 123478912 15 23 31 39
8 V 12837471234 16 24 32 40
我有一个数据框,其中有一列填充了这样的数据,在染色体上,然后是碱基位置,都在一列中。我用整数填充了剩余的 V2 到 V5 列,只是为了模拟类似的 data.frame.
> test
V1 V2 V3 V4 V5
1 I.1286480 9 17 25 33
2 I.1898932 10 18 26 34
3 I.11871397 11 19 27 35
4 II.1252994 12 20 28 36
5 II.18175911 13 21 29 37
6 III.10298347 14 22 30 38
7 IV.123478912 15 23 31 39
8 V.12837471234 16 24 32 40
以下列中的其他数据。这是一个巨大的数据集,有 115,000 行。我想创建两个新列,一个包含罗马数字(I、II、III、IV、V),另一列包含罗马数字后面的数字。我遇到的问题是这是一个字符对象向量,所以我不确定如何从数字中解析出字母。我尝试使用 DescTools 包中的 StrPos,但是
> StrPos(test$V1, "I")
[1] 1 1 1 1 1 1 1 NA
> StrPos(test$V1, "I.")
[1] 1 1 1 1 1 1 1 NA
它 returns 所有 "I" 的位置,而不仅仅是具有一个 "I" 实例的对象。我想知道 substring
是否可行?但是后来我遇到了所有罗马数字长度不同的问题,以及罗马数字后面的数字长度也不同。我知道这个问题一定有一个简单的解决方案,但我唯一能想到的就是很长的 for
和 if
循环。帮助我,Whosebug,你是我唯一的希望!
使用 tidyr
中的 separate
:
library(tidyr)
separate(test, V1, into = c("chr", "pos"))
chr pos V2 V3 V4 V5
1 I 1286480 9 17 25 33
2 I 1898932 10 18 26 34
3 I 11871397 11 19 27 35
4 II 1252994 12 20 28 36
5 II 18175911 13 21 29 37
6 III 10298347 14 22 30 38
7 IV 123478912 15 23 31 39
8 V 12837471234 16 24 32 40