gpt4 book ai didi

r - 我的向量到列的代码优化

转载 作者:行者123 更新时间:2023-12-03 07:54:47 25 4
gpt4 key购买 nike

是否有更好的方法来更好地优化 R 中的这段代码

df = data.frame("Population" = c("4.88M", "3.12M", "819k",  "4660",  "46.7k", "4.86M", "856k"))
int_list <- numeric(nrow(df))
for (y in 1:nrow(df)) {
i <- df$Population[y]
if (str_detect(i, "k")){
no_k <- gsub("k", "", i)
x <- as.numeric(no_k)
fix_X <- x * 1000
} else if (str_detect(i, "M")) {
no_M <- gsub("M", "", i)
x <- as.numeric(no_M)
fix_X <- x * 1000000
} else {
fix_X <- as.numeric(i)
}
int_list[y] = fix_X
}
df$pop_fix <- int_list

编辑:添加了一个示例 DF

我得到了我需要的结果,只是想知道我是否可以做得更好我尝试过 ifelse 语句,但它们总是会导致错误,我也尝试将其放入列中,但随后它将过去的值覆盖到最后一个

最佳答案

1) 这是一句俏皮话。没有使用任何包。

transform(df, pop_fix = as.numeric(sub("k", "e3", sub("M", "e6", Population))))
## Population pop_fix
## 1 4.88M 4880000
## 2 3.12M 3120000
## 3 819k 819000
## 4 4660 4660
## 5 46.7k 46700
## 6 4.86M 4860000
## 7 856k 856000

2) 或使用 Reduce

L <- list(k = "e3", M = "e6")
transform(df, pop_fix = as.numeric(Reduce(\(x, nm) sub(nm, L[[nm]], x),
init = Population, names(L))))

3) 这也有效,并且从概念上讲可以同时进行两种替换:

library(gsubfn)

transform(df, pop_fix = as.numeric(gsubfn(".", list(M="e6",k="e3"), Population)))

关于r - 我的向量到列的代码优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76302357/

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