gpt4 book ai didi

R - 根据键值对替换数据框列中的所有值

转载 作者:行者123 更新时间:2023-12-05 04:52:00 26 4
gpt4 key购买 nike

在“汽车”数据集中,一列包含汽车原产地代码。美国 1 个,欧洲 2 个,日本 3 个。我想用字符串替换代码。所有 1 都应替换为“amer”,2 将替换为“euro”,3 将替换为“jap”。

查询

  1. 在 R 中创建键值对的最佳方法是什么?(我是用列表做的,有没有更好的方法?)

  2. 根据键值对替换数据框列中的值的最有效方法是什么?

这是一个模拟数据:

a = replicate(15, sample(1:3, 1))
a
#> 3 3 3 3 1 2 3 1 3 3 1 3 1 2 3


## Create key-value pairings
origin_code = vector(mode='list', length=3)
names(origin_code) = c(1, 2, 3)
origin_code[[1]] = 'amer'
origin_code[[2]] = 'euro'
origin_code[[3]] = 'jap'
origin_code
#>
$`1`
[1] "amer"

$`2`
[1] "euro"

$`3`
[1] "jap"

## Replace values
<Help needed here>

# I tried the following but got NULL (Why?)
# replace values
b = for (x in unique(a)) {replace(a, a==x, origin_code[x])}
b
#> NULL

最佳答案

由于a是一个数值,可以作为索引

unlist(origin_code[a], use.names = FALSE)
#[1] "jap" "jap" "jap" "jap" "amer" "euro" "jap" "amer" "jap" "jap" "amer" "jap" "amer" "euro" "jap"

如果 list 和 'a' 的名称不是数字,则可以使用 match

unlist(origin_code[match(a, names(origin_code))], use.names = FALSE)

或者也可以使用命名向量来实现

unname(unlist(origin_code)[as.character(a)])

在OP的代码中,我们可以做一个简单的改变

b <- a
for(x in unique(a)) b <- replace(b, b == x, origin_code[[x]])
b

数据

a <- c(3, 3, 3, 3, 1, 2, 3, 1, 3, 3, 1, 3, 1, 2, 3)

关于R - 根据键值对替换数据框列中的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66628947/

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