使用R进行重新编码

时间:2011-09-07 08:17:58

标签: r vector

我有一个有大坝,陛下和其他变量的数据集,但我需要重新编码我的大坝和父亲id。坝柱被分类,每只动物只有一次。另一方面,父系专栏未分类,一些动物出现不止一次。

我想从50,000开始编号,这样第一只动物将获得50001,第二只动物获得50002等等。我有这个脚本,从1到N对每个大坝进行编号,并想知道它是否可以修改为从50,000开始。

mydf$dam2 <- as.numeric(factor(paste(mydf$dam,sep=""))) 

* EDITED 我的数据集与此类似,但更多变量

dam <- c("1M521","1M584","1M790","1M871","1M888","1M933")
sire <- c("1X057","1T456","1W865","1W209","1W209","1W648")
wt <- c(369,300,332,351,303,314)
p2 <- c(NA,16,18,NA,NA,15)
mydf <- data.frame(dam,sire,wt,p2)

对于sire列,我想从10,000开始编号。

非常感谢任何帮助。

巴兹

2 个答案:

答案 0 :(得分:1)

目前,那些sire和dam列是因子变量,但在这种情况下,这意味着您只需将as.numeric()结果添加到基数:

> mydf$dam_n <- 50000 +as.numeric(mydf$dam)
> mydf$sire_n <- 10000 +as.numeric(mydf$sire)
> mydf
    dam  sire  wt p2 dam_n sire_n
1 1M521 1X057 369 NA 50001  10005
2 1M584 1T456 300 16 50002  10001
3 1M790 1W865 332 18 50003  10004
4 1M871 1W209 351 NA 50004  10002
5 1M888 1W209 303 NA 50005  10002
6 1M933 1W648 314 15 50006  10003

答案 1 :(得分:0)

为什么不使用:

names(mydf$dam2) <- 50000:whatEverYourLengthIs

我不确定我是否完全理解你的数据结构,但通常使用names-function来设置名称。

编辑:

您可以使用dimnames来命名列和行。 像:

  [,1] [,2]
a    1    2
b    4    5
c    7    8

dimnames(mymatrix) <- list(c("Jan", "Feb", "Mar"), c("2005", "2006"))

产量

          2005     2006
Jan          1        2
Feb          4        5
Mar          7        8