R 用两列中的连续自然数替换整数
我在Mac(x86_64-apple-darwin13.4.0)上使用R版本3.1.2 我有40个文件,每个文件有5列,如下所示R 用两列中的连续自然数替换整数,r,macos,replace,unique,R,Macos,Replace,Unique,我在Mac(x86_64-apple-darwin13.4.0)上使用R版本3.1.2 我有40个文件,每个文件有5列,如下所示 > D16S503 MARKER LANE ID A_1 A_2 1 D16S503 D16S503 1228-0198898 309 313 2 D16S503 D16S503 1228-0198899 301 311 3 D16S503 D16S503 1228-0198900 301 311 4 D16S503 D16S5
> D16S503
MARKER LANE ID A_1 A_2
1 D16S503 D16S503 1228-0198898 309 313
2 D16S503 D16S503 1228-0198899 301 311
3 D16S503 D16S503 1228-0198900 301 311
4 D16S503 D16S503 1228-0198901 301 311
5 D16S503 D16S503 1228-0198903 311 313
6 D16S503 D16S503 1228-0198904 301 301
7 D16S503 D16S503 1228-0198905 301 301
8 D16S503 D16S503 1228-0198906 301 313
9 D16S503 D16S503 1228-0198907 301 311
10 D16S503 D16S503 1228-0198908 301 313
11 D16S503 D16S503 1228-0198909 301 311
12 D16S503 D16S503 1228-0198910 301 301
13 D16S503 D16S503 1228-0198911 301 307
14 D16S503 D16S503 1228-0198912 301 301
15 D16S503 D16S503 1228-0198913 301 311
16 D16S503 D16S503 1228-0198914 301 311
17 D16S503 D16S503 1228-0198915 311 311
18 D16S503 D16S503 1228-0198916 301 311
19 D16S503 D16S503 1228-0198917 311 313
20 D16S503 D16S503 1228-0198918 301 301
21 D16S503 D16S503 1228-0198919 301 313
22 D16S503 D16S503 1228-0198920 301 311
23 D16S503 D16S503 1228-0198921 305 311
24 D16S503 D16S503 1228-0198922 311 311
25 D16S503 D16S503 1228-0198923 307 311
26 D16S503 D16S503 1228-0198924 301 311
首先,我在最后两列中标识唯一的整数
> sort(unique(c(D16S503$A_1,D16S503$A_2)))
[1] 301 305 307 309 311 313
然后,我希望用从1开始递增的连续自然数替换D16S503$A_1和D16S503$A_2列中的整数。
i、 e.将301替换为1305,将2307替换为3,以此类推
这是我想要的数据帧
> D16S503
MARKER LANE ID A_1 A_2
1 D16S503 D16S503 1228-0198898 4 6
2 D16S503 D16S503 1228-0198899 1 5
3 D16S503 D16S503 1228-0198900 1 5
4 D16S503 D16S503 1228-0198901 1 5
5 D16S503 D16S503 1228-0198903 5 6
6 D16S503 D16S503 1228-0198904 1 1
7 D16S503 D16S503 1228-0198905 1 1
8 D16S503 D16S503 1228-0198906 1 6
9 D16S503 D16S503 1228-0198907 1 5
10 D16S503 D16S503 1228-0198908 1 6
11 D16S503 D16S503 1228-0198909 1 5
12 D16S503 D16S503 1228-0198910 1 1
13 D16S503 D16S503 1228-0198911 1 3
14 D16S503 D16S503 1228-0198912 1 1
15 D16S503 D16S503 1228-0198913 1 5
16 D16S503 D16S503 1228-0198914 1 5
17 D16S503 D16S503 1228-0198915 5 5
18 D16S503 D16S503 1228-0198916 1 5
19 D16S503 D16S503 1228-0198917 5 6
20 D16S503 D16S503 1228-0198918 1 1
21 D16S503 D16S503 1228-0198919 1 6
22 D16S503 D16S503 1228-0198920 1 5
23 D16S503 D16S503 1228-0198921 2 5
24 D16S503 D16S503 1228-0198922 5 5
25 D16S503 D16S503 1228-0198923 3 5
26 D16S503 D16S503 1228-0198924 1 5
我的文件在A_1和A_2列中都包含不同的整数,并且包含2到10个唯一整数
我怎样才能做到这一点?我很乐意一个接一个地处理每个文件,但我知道R函数会更快,出错的机会也更小。在
R
中,您可以将所需的列(“A_1”、“A_2”)转换为“factor”类,方法是将“levels”指定为这些列(“LVL”)中排序的串联唯一元素,然后强制将其转换回“numeric”
lvls哪种语言/平台?你应该添加一个标签列出它。已经更新谢谢你工作得很好!非常感谢你。
lvls <- sort(unique(c(D16S503$A_1,D16S503$A_2)))
D16S503[4:5] <- lapply(D16S503[4:5], function(x)
as.numeric(factor(x, levels=lvls)))
head(D16S503,3)
# MARKER LANE ID A_1 A_2
#1 D16S503 D16S503 1228-0198898 4 6
#2 D16S503 D16S503 1228-0198899 1 5
#3 D16S503 D16S503 1228-0198900 1 5