我在Mac上使用R版本3.1.2(x86_64-apple-darwin13.4.0)
我有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 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
然后,我希望将列D16S503 $ A_1和D16S503 $ A_2中的整数替换为从1开始的连续自然数增加。 即将301替换为1,305替换为307,30替换为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函数会更快,更容易出错。
答案 0 :(得分:0)
在R
中,您可以将所需的列(" A_1"," A_2")转换为" factor"通过指定"级别"作为来自这些列的排序连接的唯一元素(" 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