【问题标题】:Matching and replacing values in different columns given an ID number给定 ID 号匹配和替换不同列中的值
【发布时间】:2015-10-30 03:42:46
【问题描述】:

假设我在 R df 中有一个数据框,我试图用它们各自的 name 替换 Client1Client2Client3 数字(ID)。我知道Client* 向量中的每个数字都代表一个name,给定它的id #。

Client1 Client2 Client3 X Y Z id Name A B C
1       2       3       y n y 1  Jay  n y n
4       1       2       y n n 4  Jack n y n
2       10      5       y n n 2  Jill y y y
8       4       2       n n y 8  Ana  y y y

如果有人知道可以对框架执行以下更改的一系列命令,我将不胜感激:

Client1 Client2 Client3 X Y Z id Name A B C
Jay     Jill    Tom     y n y 1  Jay  n y n
Jack    Jay     Jill    y n n 4  Jack n y n
Jill    Dan     Wayne   y n n 2  Jill y y y
Ana     Jack    Jill    n n y 8  Ana  y y y

因此Client*列与id和name匹配。

非常感谢!

【问题讨论】:

    标签: r replace match


    【解决方案1】:

    假设 OP 仅提供了示例数据的一小部分,并且在随后的行中,将找到与 'Dan'、'Wayne' 匹配的 'ids'。

    一个选项是在转换为matrix 并使用“df1”的“id”列之后将原始数据集中的“Client”列转换为match。这将提供数字索引,用于从数据集中获取相应的“名称”元素。输出可以分配回“客户”列以用“名称”替换数字

      nm1 <- grep('^Client', colnames(df1))
      df1[nm1] <- df1$Name[match(as.matrix(df1[nm1]), df1$id)]
      df1
      #  Client1 Client2 Client3 X Y Z id  Name A B C
      #1     Jay    Jill     Tom y n y  1   Jay n y n
      #2    Jack     Jay    Jill y n n  4  Jack n y n
      #3    Jill     Dan   Wayne y n n  2  Jill y y y
      #4     Ana    Jack    Jill n n y  8   Ana y y y
      #5   Wayne     Tom     Jay n n y  5 Wayne n y n
      #6     Dan    Jack     Tom y n n 10   Dan y n y
      #7     Tom    Jack    Jill n y n  3   Tom n y y
    

    数据

      df1 <- structure(list(Client1 = c(1L, 4L, 2L, 8L, 5L, 10L, 3L), 
      Client2 = c(2L, 
      1L, 10L, 4L, 3L, 4L, 4L), Client3 = c(3L, 2L, 5L, 2L, 1L, 3L, 
      2L), X = c("y", "y", "y", "n", "n", "y", "n"), Y = c("n", "n", 
      "n", "n", "n", "n", "y"), Z = c("y", "n", "n", "y", "y", "n", 
      "n"), id = c(1L, 4L, 2L, 8L, 5L, 10L, 3L), Name = c("Jay", "Jack", 
      "Jill", "Ana", "Wayne", "Dan", "Tom"), A = c("n", "n", "y", "y", 
      "n", "y", "n"), B = c("y", "y", "y", "y", "y", "n", "y"), C = c("n", 
      "n", "y", "y", "n", "y", "y")), .Names = c("Client1", "Client2", 
      "Client3", "X", "Y", "Z", "id", "Name", "A", "B", "C"),
       class = "data.frame", row.names = c(NA, -7L))
    

    注意:添加了更多行以使所有“名称”对应于“数字”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多