首页 > 解决方案 > 如何根据来自另一个表(在 R 中)的模式匹配重命名列和行?

问题描述

我有原始数据表 A,我试图根据另一个表重命名列名和行,该表用作各种索引表。

第一季度 第二季度
a1 a1
a2 a2
a2 a1
a2 a2

我制作了第二个表 B 以尝试将 rawdata-names 与其所需的实际名称连接起来

标题 想要的标题 答案 想要的答案
第一季度 你有压力吗? a1 是的
第一季度 你有压力吗? a2
第二季度 你多久锻炼一次? a1 日常的
第二季度 你多久锻炼一次? a2 每周

因此,我首先尝试替换表 A 的列名,然后替换表 A 的行,其中值取决于同一个问题。

更新: 有人告诉我要更简洁地说明我正在寻找的内容。

我正在寻找一种基于查找与表 B 的匹配来更新表 A 中的值的方法。

期望的输出:

你有压力吗? 你多久锻炼一次?
是的 日常的
每周
是的 日常的
是的 每周

标签: rdplyrtidyverse

解决方案


使用tidyverse函数你可以这样做:

library(dplyr)
library(tidyr)

df1 %>%
  mutate(row = row_number()) %>%
  pivot_longer(cols = -row) %>%
  left_join(df2, by = c('name' = 'Qtitles', 'value' = 'answers')) %>%
  select(row, desiredtitles, desiredanswers) %>%
  pivot_wider(names_from = desiredtitles, values_from = desiredanswers) %>%
  select(-row)

# `Are you stressed?` `How often do you exercise?`
#  <chr>               <chr>                       
#1 Yes                 Daily                       
#2 No                  Weekly                      
#3 No                  Daily                       
#4 No                  Weekly                

数据

df1 <- structure(list(Q1 = c("a1", "a2", "a2", "a2"), Q2 = c("a1", "a2", 
"a1", "a2")), row.names = c(NA, -4L), class = "data.frame")

df2 <- structure(list(Qtitles = c("Q1", "Q1", "Q2", "Q2"), desiredtitles = c("Are you stressed?", 
"Are you stressed?", "How often do you exercise?", "How often do you exercise?"
), answers = c("a1", "a2", "a1", "a2"), desiredanswers = c("Yes", 
"No", "Daily", "Weekly")), row.names = c(NA, -4L), class = "data.frame")

推荐阅读