首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按行名追加2个不同数据集中的2列

如何按行名追加2个不同数据集中的2列
EN

Stack Overflow用户
提问于 2021-08-13 21:31:54
回答 4查看 39关注 0票数 1

我有两个独立的数据帧:

代码语言:javascript
复制
> head(data)

  Drug.Substance.Calcium Drug.Substance.Glycine Drug.Substance.Histidine
    1                             45.0                                120.0                                                              
    2                             43.0                                100.0                                                               
    3                             33.7                                 9.6                                                              

我想将单位添加到列名中。可以在不同的数据集中找到这些单位(在UOM列中)

代码语言:javascript
复制
> head(ag_parameter_6[10:13,])
    X                PARAMETER DATA_TYPE PARAMETER_TYPE    UOM
10  9   Drug Substance.Calcium    double              D mmol/L
11 10 Drug Substance.Endotoxin    string              D       
12 11   Drug Substance.Glycine    double              D  mg/mL
13 12 Drug Substance.Histidine    double              D mmol/L

如何修改data数据框,使每一列都有正确的单位(单位)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-08-14 02:45:52

您可以使用rename_with -

代码语言:javascript
复制
library(dplyr)

data %>%
  rename_with(~paste(., ag_parameter_6$UOM[match(., ag_parameter_6$PARAMETER)]))

#  Drug.Substance.Calcium mmol/L Drug.Substance.Glycine mg/mL Drug.Substance.Histidine mmol/L
#1                             1                         45.0                           120.0
#2                             2                         43.0                           100.0
#3                             3                         33.7                             9.6
票数 0
EN

Stack Overflow用户

发布于 2021-08-13 21:35:10

我们可以在base R中做到这一点

代码语言:javascript
复制
i1 <- match(names(data), ag_parameter_6$PARAMETER)
names(data) <- paste(names(data), ag_parameter_6$UOM[i1])

-output

代码语言:javascript
复制
> data
  Drug.Substance.Calcium mmol/L Drug.Substance.Glycine mg/mL Drug.Substance.Histidine mmol/L
1                             1                         45.0                           120.0
2                             2                         43.0                           100.0
3                             3                         33.7                             9.6

数据

代码语言:javascript
复制
data <- data.frame(
    Drug.Substance.Calcium = c(1L, 2L, 3L),
    Drug.Substance.Glycine = c(45, 43, 33.7),
  Drug.Substance.Histidine = c(120, 100, 9.6)
       )


ag_parameter_6 <- data.frame(
  stringsAsFactors = FALSE,
                           PARAMETER = c("Drug.Substance.Calcium",
                                         "Drug.Substance.Endotoxin",
                                         "Drug.Substance.Glycine","Drug.Substance.Histidine"),
         DATA_TYPE = c("double", "string", "double", "double"),
    PARAMETER_TYPE = c("D", "D", "D", "D"),
               UOM = c("mmol/L", NA, "mg/mL", "mmol/L")
                  )
票数 3
EN

Stack Overflow用户

发布于 2021-08-13 21:44:00

我敢打赌,有一种更简洁的base R方法来实现这一点,但这里有一点冗长的整齐方法:

代码语言:javascript
复制
library(tidyverse)
data %>%
  mutate(row = row_number()) %>%  # allows us to pivot wider later

  # reshape long, join to other data, and rename headers
  pivot_longer(-row) %>%
  left_join(ag_parameter_6, by = c("name" = "PARAMETER")) %>%
  mutate(name = paste(name, UOM)) %>%

  # pivot back to original wide format
  select(row, name:value) %>%
  pivot_wider(names_from = name, values_from = value)

结果

代码语言:javascript
复制
# A tibble: 3 x 4
    row `Drug.Substance.Calcium mmol/L` `Drug.Substance.Glycine mg/mL` `Drug.Substance.Histidine mmol/L`
  <int>                           <dbl>                          <dbl>                             <dbl>
1     1                               1                           45                               120  
2     2                               2                           43                               100  
3     3                               3                           33.7                               9.6

源数据(请以可重现的方式包含这些数据,以备将来提问时使用。)

代码语言:javascript
复制
data <- data.frame(
    Drug.Substance.Calcium = c(1L, 2L, 3L),
    Drug.Substance.Glycine = c(45, 43, 33.7),
  Drug.Substance.Histidine = c(120, 100, 9.6)
       )


ag_parameter_6 <- data.frame(
  stringsAsFactors = FALSE,
                           PARAMETER = c("Drug.Substance.Calcium",
                                         "Drug.Substance.Endotoxin",
                                         "Drug.Substance.Glycine","Drug.Substance.Histidine"),
         DATA_TYPE = c("double", "string", "double", "double"),
    PARAMETER_TYPE = c("D", "D", "D", "D"),
               UOM = c("mmol/L", NA, "mg/mL", "mmol/L")
                  )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68778548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档