将字符名称分配给R中的唯一数字标识符

时间:2018-08-20 02:15:13

标签: r

我有一个使用唯一数字标识符表示位置的数据集。我正在尝试将该数字转换为该位置的名称。我最初的想法是创建一个if函数来替换或创建具有该位置的新列,但是我认为这是错误的做法。下面的虚拟数据

  ID    df1    df2    df3
  1     $500   yes    open
  1     $56    no     close 
  1     $40    no     pend
  2     $65    yes    open 
  3     $600   no     close
  6     $100   no     pend

所需的输出

  ID    df1    df2    df3
  HCA   $500   yes    open
  HCA   $56    no     close 
  HCA   $40    no     pend
  LMO   $65    yes    open 
  SAH   $600   no     close
  SEM   $100   no     pend

  Loc  ID  df1    df2    df3
  HCA  1   $500   yes    open
  HCA  1   $56    no     close 
  HCA  1   $40    no     pend
  LMO  2   $65    yes    open 
  SAH  3   $600   no     close
  SEM  6   $100   no     pend

4 个答案:

答案 0 :(得分:0)

假设您有一个将merge映射到ID的数据框,则应该可以在此处使用普通Loc

map <- data.frame(ID=c(1,2,3,6), Loc=c("HCA", "LMO", "SAH", "SEM"),
    stringsAsFactors=FALSE)
result <- merge(df, map, by="ID", all=TRUE)[c("Loc", "df1", "df2", "df3")]
result

  Loc  df1 df2   df3
1 HCA $500 yes  open
2 HCA  $56  no close
3 HCA  $40  no  pend
4 LMO  $65 yes  open
5 SAH $600  no close
6 SEM $100  no  pend

Demo

答案 1 :(得分:0)

我们可以仅使用“ ID”作为索引(假设它是numeric)。

df1$ID <- c("HCA", "LMO", "SAH", "", "", "SEM")[df1$ID]
df1$ID
#[1] "HCA" "HCA" "HCA" "LMO" "SAH" "SEM"

注意:作为输入向量,第4个和第5个元素保留为空白。如果原始数据集中存在这些“ ID”,则用相应的字符串填充这些ID。

答案 2 :(得分:0)

您应该尝试:

database$ID[database$ID == 1] <- "HCA"

如果此解决方案不起作用,请告诉我。

答案 3 :(得分:0)

有一个很棒的软件包,叫做data.table

只需遵循我的示例:

require("data.table")

x = data.table(c(1, 2, 3), c(1000, 2000, 3000))
names = c("A", "B", "C")

set(x, i = NULL, "V1", names)

结果:

  

V1 V2

     

1:A 1000

     

2:B 2000

     

3:D 3000