gpt4 book ai didi

基于列表(哈希)替换 R 中的向量值

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

我有一个数据框,其中一列是名称。在稍后的分析阶段,我将需要通过此名称列与其他数据合并,并且有一些名称因来源而异。我想使用名称的哈希(映射)->已清理的名称来清理我的名称。我发现了一些使用 R 列表作为哈希的引用(例如 this question on SE ),但我无法弄清楚如何仅在向量中的键出现时提取它们的值。例如,

> players=data.frame(names=c("Joe", "John", "Bob"), scores=c(9.8, 9.9, 8.8))
> xref = c("Bob"="Robert", "Fred Jr." = "Fred")
> players$names
[1] Joe John Bob
Levels: Bob Joe John

虽然players$names给出了原始帧中的名称向量,但我需要相同的向量,只需将xref中出现的任何值替换为它们的等效值(查找)值;我想要的结果是向量Joe John Robert

我最接近的是:

> players$names %in% names(xref)
[1] FALSE FALSE TRUE

这正确地表明players$names中只有“Bob”存在于xref的“键”(名称)中,但我不知道如何提取该名称的值,并根据需要将其与向量中不属于外部参照的其他名称组合。

注意:如果不完全清楚,我对 R 还很陌生,所以如果我以错误的方式处理这个问题,我很高兴得到纠正,但我的核心问题本质上如上所述:我需要通过用已知的替换值替换一些传入值并保留所有其他值来清理 R 中的一些传入数据;此外,原始->替换的 map 应存储为数据(如外部参照),而不是代码。

最佳答案

更新答案:ifelse

ifelse 是一个更直接的解决方案,如果外部参照是命名向量而不是列表。

players <- data.frame(names=c("Joe", "John", "Bob"), scores=c(9.8, 9.9, 8.8), stringsAsFactors = FALSE)
xref <- c("Bob" = "Robert", "Fred Jr." = "Fred")

players$clean <- ifelse(is.na(xref[players$names]), players$names, xref[players$names])

players

结果

   names scores  clean
1 Joe 9.8 Joe
2 John 9.9 John
3 Bob 8.8 Robert

上一个答案:sapply

如果外部参照是一个列表,则可以使用sapply函数进行条件查找

players <- data.frame(names=c("Joe", "John", "Bob"), scores=c(9.8, 9.9, 8.8))

xref <- list("Bob" = "Robert", "Fred Jr." = "Fred")

players$clean <- sapply(players$names, function(x) ifelse( x %in% names(xref), xref[x], as.vector(x)) )

players

结果

> players
names scores clean
1 Joe 9.8 Joe
2 John 9.9 John
3 Bob 8.8 Robert

关于基于列表(哈希)替换 R 中的向量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22289184/

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