【发布时间】:2018-04-21 21:47:24
【问题描述】:
我需要根据查找向量有条件地重新编码我的数据框d。
dput(lookup)
structure(c("Apple", "Apple", "Banana", "Carrot"), .Names = c("101", "102", "102", "103"))
dput(d)
structure(list(pat = c(101, 101, 101, 102, 102, 103), gene = structure(1:6, .Label = c("a",
"b", "c", "d", "e", "f"), class = "factor"), Apple = c(0.1, 0.2,
0.3, 0.4, NA, NA), Banana = c(NA, NA, NA, NA, 0.55, NA), Carrot = c(NA,
NA, NA, NA, NA, 0.6)), .Names = c("pat", "gene", "Apple", "Banana",
"Carrot"), row.names = c(NA, -6L), class = "data.frame")
d 是我通过reshape 获得的宽数据框。如果pat 根据查找表匹配该列,我需要将Apple、Banana 和Carrot 每一列中的任何NAs 重新编码为0。在这种情况下,d$Apple[5] 和 d$Banana[4] 将被重新编码为 0。
我一直在玩 dplyr 中的 recode,但我不知道如何让它查找和重新编码,更不用说它必须在多个列上完成......还有另一个相关的帖子在recoding variables in R with a lookup table 上,但它似乎不适用于我的问题。有人可以帮我吗?谢谢!
编辑
我尝试了以下方法:。
e <- melt(d, id.vars=c("pat", "gene"))
e %>% mutate(test=ifelse(lookup[as.character(pat)] == variable, replace(value, is.na(value), 0), value))
我的代码部分工作。它成功地在d$Apple[5] 中重新编码NA 而不是在d$Banana[4] 中,因为查找只能给出第一个值:
lookup["102"]
102
"Apple"
而我需要我的查找能够同时输出“Apple”和“Banana”,并能够相应地转换满足每个条件的NAs。有什么想法吗?
【问题讨论】: