使用指定替换的数据框更改数据框中的所有值

时间:2015-06-05 14:01:38

标签: r

我有一个看似简单的问题,但我似乎无法找到这个问题的答案。我试图用字符串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中指定的内容。

感谢。

2 个答案:

答案 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)