我有两个独立的数据帧:
> 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列中)
> 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数据框,使每一列都有正确的单位(单位)?
发布于 2021-08-14 02:45:52
您可以使用rename_with -
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发布于 2021-08-13 21:35:10
我们可以在base R中做到这一点
i1 <- match(names(data), ag_parameter_6$PARAMETER)
names(data) <- paste(names(data), ag_parameter_6$UOM[i1])-output
> 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数据
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")
)发布于 2021-08-13 21:44:00
我敢打赌,有一种更简洁的base R方法来实现这一点,但这里有一点冗长的整齐方法:
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)结果
# 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源数据(请以可重现的方式包含这些数据,以备将来提问时使用。)
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")
)https://stackoverflow.com/questions/68778548
复制相似问题