gpt4 book ai didi

r - 如何编写函数来改变字符串并进行算术运算

转载 作者:行者123 更新时间:2023-12-01 04:27:18 25 4
gpt4 key购买 nike

我在数据框中有一个变量,其中包含的值要么是 Varies with devicea number with M之后,或 a number with k后。

例如:

10M
1.2M
120k
Varies with device

我要带 the values with M只需删除 M我想带 the values with k并删除 k并将它们乘以 0.001。

示例输出:
10
1.2
0.12
Varies with device

我希望输出位于 dataframe 中的变量中,要么替换原始变量,要么作为一个新变量。

我试图创建一个这样的函数,但我无法让它工作。
convert <- function(x) {
if(grep("M$", x)) {
str_sub(x, 1, -1)
as.numeric(x)
} else if(grep("k$", x)) {
str_sub(x, 1, -1)
as.numeric(x)
(x*0.001)
}
}

最佳答案

test <- c("10M 1.2M 120k Varies with device")

library(stringr)
library(magrittr)

str_replace_all(test,"[0-9\\.]+(?=k)",function(x){as.numeric(x)/1000}) %>%
gsub("k|M","",.)

[1] "10 1.2 0.12 Varies with device"

函数 str_replace_all用其他模式或由函数转换的匹配模式替换匹配模式。我在这里用它来除以每 1000 个数字 [0-9\\.]+后跟 k (?=k) .

然后我用 gsub 删除 k 和 M(我匹配 k 或 M "k|M" 并用空替换它)

它也适用于向量
test <- c("10M","1.2M", "120k"," Varies with device")
str_replace_all(test,"[0-9\\.]+(?=k)",function(x){as.numeric(x)/1000}) %>%
gsub("k|M","",.)

[1] "10" "1.2" "0.12" " Varies with device"

关于r - 如何编写函数来改变字符串并进行算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453133/

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