在argtype和argaction函数中循环

时间:2015-04-04 06:41:39

标签: r function loops

刚刚在这里创建了一个帐户,因为我终于有了一个值得问的问题。我是R的新手(1年,开关用户),但通常能够在线找到我的R问题的答案。我的问题有点令人费解,所以我会尽量保持清醒。如果我的术语不重要,请道歉。

我有一个包含两列的数据框,一个旧ID号和两个保护功能名称。 E.g:

> df =
> code    attr
> 1       FSM Oceanic atoll
> 3       FSM Oceanic bank
> 1       Palau Oceanic atoll
> 3       Palau Oceanic bank

正如您所看到的,这些功能是独一无二的,但不是旧编码系统。我需要使用新的唯一ID代码创建一个新列。例如:

> df =
> code  attr                  new.code
> 1     FSM Oceanic atoll     1
> 3     FSM Oceanic Bank      2
> 1     Palau Oceanic atoll   3
> 3     Palau Oceanic Bank    4

我从上一个问题中找到了一种方法:

> newCodes <- function(argtype, argaction){ 
>    if (argtype==1 & argaction=="FSM Oceanic atoll")
>       return(1)
>    if (argtype==3 & argaction=="FSM Oceanic Bank")
>       return(2)
>    if (argtype==1 & argaction=="Palau Oceanic atoll")
>       return(3)
>    if (argtype==3 & argaction=="Palau Oceanic Bank")
>       return(4)
>    } # Defines my function
>
> df$new.code <- mapply(newCodes, df$code, df$attr) # Creates the new conditional column

它需要以这种方式完成的原因是因为我的原始数据帧有许多相同“独特功能”的重复条目,需要为我的目的进行维护(它本质上是shapefile的属性表,因此重复的条目)。

当我只有一些功能(如10)时,上面的功能代码很棒,但在某些时候我需要为具有多达185个独特功能的表格执行此操作。我想知道是否可以循环上面的函数,这样我就不必为每个功能手动输入单独的“argtypes”和“argactions”?我觉得可能有一种方法可以根据我得到的初始数据帧帧(即我给出的第一个数据帧)循环这个。我不知道它在代码中会是什么样子但是意味着什么:

> if (argtype == [loop: through each old code number row by row in the initial "code"
> column in 1st df] & argaction == [loop: through each corresponding attribute name row
> by row in the initial "attr" column in 1st df])
>    return([loop: just loop through each row value of a df with the new code IDs,
> which would be just 1 to x, x being number of new ID codes needed])

真的希望我的意思很清楚。感谢您对此提出的任何建议。

1 个答案:

答案 0 :(得分:0)

transform(df, new.code=as.numeric(factor(attr)))

这为attr中的每个唯一术语提供了一个数字,编号是按字母顺序排列的。它使用的事实是,如果将因子转换为数字,它会给出一个指向因子水平的整数。我希望这有帮助。 干杯