好吧我对R来说很新,这是一个普遍的问题。我有各种数字,我想替换整个部分,并保持小数部分不变。 例如,我有25.01到25.99的值,我想用10替换25,但保持小数部分不变(所以我的新数字将从10.01到10.99)。 这可能吗?
答案 0 :(得分:1)
评论者是对的。数字列表的长度并不重要。 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&C”中内置的功能。快速的语言,我们每次矢量化都会利用这种速度。