根据R中的另一个匹配 Dataframe 重命名列值

rsaldnfx  于 2023-02-01  发布在  其他
关注(0)|答案(2)|浏览(131)

假设我们有三个 Dataframe dfa
| 姓名|身份证|
| - ------|- ------|
| 千斤顶|1个|
| 玫瑰|第二章|
DFB
| 身份证|工作|
| - ------|- ------|
| 项目a|学生|
| B|导师|
直接燃料电池
| 初级的|列名|
| - ------|- ------|
| 项目a|第二章|
| B|1个|
如何使用R将dfa id列从1,2重命名为B,a?
请帮我解答这个问题!非常感谢!

db2dz4w8

db2dz4w81#

一种dplyr方法是这样使用recode

library(dplyr)

dfa |> 
  mutate(id = recode(id, !!!setNames(dfc$primary, dfc$colname)))
#>   name id
#> 1 jack  b
#> 2 rose  a

或者第二选项将是使用left_join

dfa |> 
  left_join(dfc, by = c("id" = "colname")) |> 
  select(name, id = primary)
#>   name id
#> 1 jack  b
#> 2 rose  a

数据

dfa <- data.frame(
              name = c("jack", "rose"),
                id = c(1L, 2L)
)

dfc <- data.frame(
           primary = c("a", "b"),
           colname = c(2L, 1L)
)
kh212irz

kh212irz2#

我不明白这三个数据集之间的关系是不是这样的:dfa$id等于dfc$colname,dfc$primary等于dfb$id,但如果是这样,可能的答案如下:

# Load the dataframes
dfa <- data.frame(name = c("jack", "rose"),
                  id = c(1, 2))
dfb <- data.frame(id = c("a", "b"),
                  job = c("student", "tutor"))
dfc <- data.frame(primary = c("a", "b"),
                  colname = c(2, 1))

# Obtain the indexes that match between dfa and dfc
index <- match(dfa$id, dfc$colname)

# Set the id from dfa as the id in dfb taking into account the previous indices
dfa$id <- dfb$id[index]

# Print results
dfa

  name id
1 jack  b
2 rose  a

相关问题