gpt4 book ai didi

r - 基于查找向量的条件重新编码

转载 作者:行者123 更新时间:2023-12-02 01:31:31 26 4
gpt4 key购买 nike

我需要根据查找向量有条件地重新编码我的数据帧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 获得的宽数据帧。我需要将 AppleBananaCarrot 每一列中的任何 NAs 重新编码为 0 如果 pat 根据查找表匹配该列。在这种情况下,d$Apple[5]d$Banana[4] 将被重新编码为 0

我一直在玩 dplyrrecode 但我不知道如何让它查找和重新编码,更不用说它必须在多列...还有另一个相关帖子 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”,并能够相应地转换满足每个条件的NA。有什么想法吗?

最佳答案

抱歉,这里没有 dplyr,但代码相当简单。

for(i in unique(lookup)){
need_to_replace = is.na(d[[i]]) & (d$pat %in% names(lookup[lookup %in% i]))
d[[i]][need_to_replace] = 0
}

d

pat gene Apple Banana Carrot
1 101 a 0.1 NA NA
2 101 b 0.2 NA NA
3 101 c 0.3 NA NA
4 102 d 0.4 0.00 NA
5 102 e 0.0 0.55 NA
6 103 f NA NA 0.6

关于r - 基于查找向量的条件重新编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47192713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com