繁体   English   中英

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

[英]Rename column value based on another matching dataframe in R

假设我们有三个数据框 dfa

姓名 ID
杰克 1个
玫瑰 2个

dfb

ID 工作
A 学生
b 导师

dfc

基本的 列名
A 2个
b 1个

如何使用 R 将 dfa id 列从 1,2 重命名为 b,a?

请帮我解决这个问题! 太感谢了!

一种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)
)

我一直不明白这三个数据集之间的关系是否是这样的: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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM