我有一个看似简单的问题,但我似乎无法找到这个问题的答案。我试图用字符串TRT1,TRT2等替换威廉姆斯设计中生成的所有值(值1 - 4)。
d = data.frame(crossdes::williams(4))
names(d) = c("Period 1", "Period 2","Period 3","Period 4")
d2 = data.frame(treatmentNo = c(1,2,3,4),
treatmentName = c("TRT1","TRT2",
"TRT3", "TRT4"))
我希望将d中的所有内容从值更改为d2中指定的内容。
感谢。
答案 0 :(得分:1)
你可以这样做:
library(dplyr)
d %>% mutate_each(funs(d2$treatmentName[match(.,d2$treatmentNo)]))
给出了:
# Period 1 Period 2 Period 3 Period 4
#1 TRT1 TRT2 TRT4 TRT3
#2 TRT2 TRT3 TRT1 TRT4
#3 TRT3 TRT4 TRT2 TRT1
#4 TRT4 TRT1 TRT3 TRT2
或者您也可以尝试lookup()
包中的qdapTools
功能:
library(qdapTools)
data.frame(apply(d, 2, lookup, d2))
或使用基础R:
data.frame(lapply(d, function(x) d2$treatmentName[match(x, d2$treatmentNo)]))
给出了:
# Period.1 Period.2 Period.3 Period.4
#1 TRT1 TRT2 TRT4 TRT3
#2 TRT2 TRT3 TRT1 TRT4
#3 TRT3 TRT4 TRT2 TRT1
#4 TRT4 TRT1 TRT3 TRT2
答案 1 :(得分:0)
没有外部包装的解决方案
f <- function(x) x[match(x,d2[,1])] <- d2[match(x,d2[,1]),2]
newdf <- apply(d,1,f)
newdf <- t(newdf)