R:替换数字的整数部分但保留小数部分不变
R: replace the whole part of a number but keep the decimal part unchanged
好的,我是 R 的新手,这是一个一般性问题。我有各种数字,我想替换整个部分并保持小数部分不变。
例如,我的值从 25.01 到 25.99,我想用 10 替换 25 但保持小数部分不变(所以我的新数字将从 10.01 到 10.99)。
这可能吗?
评论者是对的。数字列表有多长并不重要。 R
可以一次完成手术
x <- c(25.01, 25.8, 25.4)
x-15
[1] 10.01 10.80 10.40
如果你 运行 遇到一个有很多数字的情况,需要保留小数点后的数字并选择一个数字放在前面,使用这样的东西:
keep.decimal <- function(x, n=10) {
paste0(n, gsub('\d*(\.\d*)', '\1', x))
}
然后你甚至可以在它前面选择你想要的数字。
keep.decimal(x)
[1] "10.01" "10.8" "10.4"
keep.decimal(x, 50)
[1] "50.01" "50.8" "50.4"
矢量化说明
当向量定义为 x <- 1:5
时,R
将尽可能尝试逐个元素地执行操作。如果必须将 2
添加到 x
的每个元素并分配给新变量 y
,则 for
循环可能会很困难:
y <- NULL
for (i in 1:length(x)) {
y[i] <- x[i] + 2
}
y
[1] 3 4 5 6 7
但是有了R
,这个操作就简化为:
y <- x + 2
这种运算技术比算术更进一步。这是要解决的问题,编写一个表达式,将小写字母与其大写字母相匹配。所以转这个:
x <- c("a", "b", "c")
x
[1] "a" "b" "d"
进入
y
[1] "aA" "bB" "dD"
我会写
y <- paste0(x, LETTERS[match(x, letters)])
y
[1] "aA" "bB" "dD"
而不是:
y <- NULL
for(i in 1:length(x)) {
y[i] <- paste0(x[i], LETTERS[match(x[i], letters)])
}
y
[1] "aA" "bB" "dD"
速度也快多了。作为类比,想想餐厅服务。 R
您的服务器准备好获取您想要的内容了吗?如果您向服务员要番茄酱,他们会拿到番茄酱并送来。然后你要一张餐巾纸。他们回去拿餐巾纸并送来。然后你要求补充。
这个过程需要很长时间。如果您同时要求番茄酱、餐巾纸和补充装,服务员将能够优化他们的行程,以最快的速度得到您想要的东西。 R
优化了内置于 'C' 语言中的函数,速度快如闪电,每次矢量化时我们都利用了这种速度。
好的,我是 R 的新手,这是一个一般性问题。我有各种数字,我想替换整个部分并保持小数部分不变。 例如,我的值从 25.01 到 25.99,我想用 10 替换 25 但保持小数部分不变(所以我的新数字将从 10.01 到 10.99)。 这可能吗?
评论者是对的。数字列表有多长并不重要。 R
可以一次完成手术
x <- c(25.01, 25.8, 25.4)
x-15
[1] 10.01 10.80 10.40
如果你 运行 遇到一个有很多数字的情况,需要保留小数点后的数字并选择一个数字放在前面,使用这样的东西:
keep.decimal <- function(x, n=10) {
paste0(n, gsub('\d*(\.\d*)', '\1', x))
}
然后你甚至可以在它前面选择你想要的数字。
keep.decimal(x)
[1] "10.01" "10.8" "10.4"
keep.decimal(x, 50)
[1] "50.01" "50.8" "50.4"
矢量化说明
当向量定义为 x <- 1:5
时,R
将尽可能尝试逐个元素地执行操作。如果必须将 2
添加到 x
的每个元素并分配给新变量 y
,则 for
循环可能会很困难:
y <- NULL
for (i in 1:length(x)) {
y[i] <- x[i] + 2
}
y
[1] 3 4 5 6 7
但是有了R
,这个操作就简化为:
y <- x + 2
这种运算技术比算术更进一步。这是要解决的问题,编写一个表达式,将小写字母与其大写字母相匹配。所以转这个:
x <- c("a", "b", "c")
x
[1] "a" "b" "d"
进入
y
[1] "aA" "bB" "dD"
我会写
y <- paste0(x, LETTERS[match(x, letters)])
y
[1] "aA" "bB" "dD"
而不是:
y <- NULL
for(i in 1:length(x)) {
y[i] <- paste0(x[i], LETTERS[match(x[i], letters)])
}
y
[1] "aA" "bB" "dD"
速度也快多了。作为类比,想想餐厅服务。 R
您的服务器准备好获取您想要的内容了吗?如果您向服务员要番茄酱,他们会拿到番茄酱并送来。然后你要一张餐巾纸。他们回去拿餐巾纸并送来。然后你要求补充。
这个过程需要很长时间。如果您同时要求番茄酱、餐巾纸和补充装,服务员将能够优化他们的行程,以最快的速度得到您想要的东西。 R
优化了内置于 'C' 语言中的函数,速度快如闪电,每次矢量化时我们都利用了这种速度。