r - 如何根据来自另一个表(在 R 中)的模式匹配重命名列和行?
问题描述
我有原始数据表 A,我试图根据另一个表重命名列名和行,该表用作各种索引表。
第一季度 | 第二季度 |
---|---|
a1 | a1 |
a2 | a2 |
a2 | a1 |
a2 | a2 |
我制作了第二个表 B 以尝试将 rawdata-names 与其所需的实际名称连接起来
标题 | 想要的标题 | 答案 | 想要的答案 |
---|---|---|---|
第一季度 | 你有压力吗? | a1 | 是的 |
第一季度 | 你有压力吗? | a2 | 不 |
第二季度 | 你多久锻炼一次? | a1 | 日常的 |
第二季度 | 你多久锻炼一次? | a2 | 每周 |
因此,我首先尝试替换表 A 的列名,然后替换表 A 的行,其中值取决于同一个问题。
更新: 有人告诉我要更简洁地说明我正在寻找的内容。
我正在寻找一种基于查找与表 B 的匹配来更新表 A 中的值的方法。
期望的输出:
你有压力吗? | 你多久锻炼一次? |
---|---|
是的 | 日常的 |
不 | 每周 |
是的 | 日常的 |
是的 | 每周 |
解决方案
使用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")
推荐阅读
- android-studio - Android Play 商店本地化问题
- android - 将 OneLogin OIDC 与 react 原生移动应用集成
- python-3.x - 比较 Snowflake 数据库中表的数据,并使用 Python pandas 数据框导出 CSV
- seaborn - Seaborn:哪种类型的内核密度估计
- ios - 如何限制 XLForm 中的字符数?
- protocols - 如何检查网站是否支持 HTTP/2 协议
- c# - 如何提高刷新和更新 ObserveableCollection 的速度和性能
- c# - 在 IIS 中使用 ARR 部署 signalR(应用程序请求路由)
- python - 对比损失函数适用于连体网络,优化器有问题
- kubernetes - Kubernetes Ingress 不工作:默认后端 404