gpt4 book ai didi

如果匹配,用另一个数据框替换列名

转载 作者:行者123 更新时间:2023-12-05 03:25:24 24 4
gpt4 key购买 nike

您好,我正在研究如何按列将数据框匹配在一起,然后重命名它。如果没有匹配的名称,那么我想删除该列。

例如,我会使用这个主数据集,称之为 DF1:

<表类="s-表"><头>姓名引用好公平<日>不好 很棒差<正文>乔治山3421332132弗兰克楼梯2928293029伯莎踪迹2525242126

然后是另一个 DF,称为 DF2,它允许我替换 DF1 的列的名称

<表类="s-表"><头>姓名Adjusted_Name<正文>好运行良好很好非常棒的工作不好运行不佳公平公平运行体面

本质上,将被替换的单词不会是任何类型的任何模式,我会尝试匹配 DF2 中的第一列并匹配到 DF1,如果 DF2$Name 和 DF(无论列),然后我将用 DF2$Adjusted_Name 的同一行替换该名称。如果没有匹配,则丢弃 DF1 中的值。

所以最终的目标是要实现:

<表类="s-表"><头>姓名引用good_run公平的运行糟糕的表现非常棒的工作<正文>乔治山34213321弗兰克楼梯29282930伯莎踪迹25252421

在这种情况下,“poor”被删除,因为它与 DF1 的列名不匹配。

我该怎么办?如果有数千列,我将如何计算?这会改变我的编码方式吗?我对 R 有点陌生,如果有任何提示,我将不胜感激。谢谢!

最佳答案

如果您对 tidyverse 解决方案持开放态度,您可以使用

library(dplyr)
library(tibble)

df %>%
rename_with(~deframe(df2)[.x], .cols = df2$Name) %>%
select(Name, Reference, any_of(df2$Adjusted_Name))

返回

# A tibble: 3 x 6
Name Reference good_run very_great_work bad_run fair_run_decent
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 George Hill 34 21 33 21
2 Frank Stairs 29 30 29 28
3 Bertha Trail 25 21 24 25

数据

df <- structure(list(Name = c("George", "Frank", "Bertha"), Reference = c("Hill", 
"Stairs", "Trail"), Good = c(34, 29, 25), Fair = c(21, 28, 25
), Bad = c(33, 29, 24), Great = c(21, 30, 21), Poor = c(32, 29,
26)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA,
-3L), spec = structure(list(cols = list(Name = structure(list(), class = c("collector_character",
"collector")), Reference = structure(list(), class = c("collector_character",
"collector")), Good = structure(list(), class = c("collector_double",
"collector")), Fair = structure(list(), class = c("collector_double",
"collector")), Bad = structure(list(), class = c("collector_double",
"collector")), Great = structure(list(), class = c("collector_double",
"collector")), Poor = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1L), class = "col_spec"))

df2 <- structure(list(Name = c("Good", "Great", "Bad", "Fair"), Adjusted_Name = c("good_run",
"very_great_work", "bad_run", "fair_run_decent")), class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L), spec = structure(list(
cols = list(Name = structure(list(), class = c("collector_character",
"collector")), Adjusted_Name = structure(list(), class = c("collector_character",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1L), class = "col_spec"))

关于如果匹配,用另一个数据框替换列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71992393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com