我有两份数据如下。
patients dataframeOption_name与Option_num交换为all.## dataframe
patid = c(1, 2, 3, 4, 5, 6, 7, 8, 9)
technique = c("VMAT", "IMRT", "ELEC", "VMAT", "VMAT", "VMAT", "ELEC", "VMAT", "IMRT")
intent = c("Radical", "Curative", "Adjuvant", "Curative", "Curative", "Curative", "Curative", "Curative", "Adjuvant")
patients = data.frame(patid, technique, intent)## data dictionary
variable = c("technique", "technique", "technique", "intent", "intent", "intent")
Option_name = c("VMAT", "IMRT", "ELEC", "Radical", "Curative", "Adjuvant")
Option_num = c(1, 2, 3, 1, 2, 3)
dict = data.frame(variable, Option_name, Option_num)因此,patients数据将更改。
从…

至

我知道如何通过一个非常手动的过程来做到这一点:
patients$technique <- replace(as.character(patients$technique), patients$technique == "VMAT",1)但我相信会有一个更有效的方法。
任何帮助都将不胜感激!
发布于 2020-08-03 13:00:32
你可以试试这个:
library(dplyr)
library(purrr)
patients %>%
mutate(across(c(technique, intent),
~map(as.character(.),
~dict$Option_num[which(dict$variable == cur_column() & dict$Option_name == .)])))或完全tidyverse选项:
library(dplyr)
library(purrr)
patients %>%
mutate(across(c(technique, intent),
~map(as.character(.),
~pull(filter(dict,
variable == cur_column(),
Option_name == .x),
Option_num))))发布于 2020-08-03 12:27:24
这肯定不是最优雅的解决方案,但我想不出其他的解决方案。
for (a in c("technique", "intent")) {
# go through the columns
for (b in unique(patients[, a])) {
# go through the Option_name
patients[patients[, a] == b, a] <- dict[dict[, "variable"] == a & dict[, "Option_name"] == b, "Option_num"]
}
}https://stackoverflow.com/questions/63228615
复制相似问题