以R表示的天花板和地板值
我有一个data.table整数表,它的值在1到60之间 我的问题是关于地板或天花板的任何数值,如下所示:12 18 24 30 36。。。六十 例如,假设my data.table包含数字13。我希望R将这个数字“转换”为12和18,因为13位于这些数字之间。此外,如果我有18,我希望R保持在18 如果我的data.table包含值50,我希望R将该数字转换为48和54,依此类推 我的目标是得到两个不同的data.table。一个用于保存地板值,另一个用于保存天花板值 你知道在R怎么能做到吗 编辑:小于12的数字应始终转换为12 示例输出: 如果有以下数据表以R表示的天花板和地板值,r,R,我有一个data.table整数表,它的值在1到60之间 我的问题是关于地板或天花板的任何数值,如下所示:12 18 24 30 36。。。六十 例如,假设my data.table包含数字13。我希望R将这个数字“转换”为12和18,因为13位于这些数字之间。此外,如果我有18,我希望R保持在18 如果我的data.table包含值50,我希望R将该数字转换为48和54,依此类推 我的目标是得到两个不同的data.table。一个用于保存地板值,另一个用于保存天花板值 你知道在R怎么能做到吗
数据表(c(1,28,29,41,53,53,17,41,41,53))
我需要以下两个输出data.tables:floored valuesdata.table(c(12,24,24,36,48,48,12,36,36,48))
我需要以下两个输出数据.tables:ceiled values
data.table(c(12,30,30,42,54,54,18,42,42,54))
我们可以使用sapply
和which.min
函数来实现这一点。从您的问题来看,目前还不清楚如何处理<12的值
x <- 1:60
num_list <- seq(12, 60, 6)
floorr <- sapply(x, function(x){
diff_vec <- x - num_list
diff_vec <- ifelse(diff_vec < 0, Inf, diff_vec)
num_list[which.min(diff_vec)]
})
ceill <- sapply(x, function(x){
diff_vec <- num_list - x
diff_vec <- ifelse(diff_vec < 0, Inf, diff_vec)
num_list[which.min(diff_vec)]
})
tail(cbind(x, floorr, ceill))
x floorr ceill
[55,] 55 54 60
[56,] 56 54 60
[57,] 57 54 60
[58,] 58 54 60
[59,] 59 54 60
[60,] 60 60 60
x我们可以使用sapply
和which.min
函数来实现这一点。从您的问题来看,目前还不清楚如何处理<12的值
x <- 1:60
num_list <- seq(12, 60, 6)
floorr <- sapply(x, function(x){
diff_vec <- x - num_list
diff_vec <- ifelse(diff_vec < 0, Inf, diff_vec)
num_list[which.min(diff_vec)]
})
ceill <- sapply(x, function(x){
diff_vec <- num_list - x
diff_vec <- ifelse(diff_vec < 0, Inf, diff_vec)
num_list[which.min(diff_vec)]
})
tail(cbind(x, floorr, ceill))
x floorr ceill
[55,] 55 54 60
[56,] 56 54 60
[57,] 57 54 60
[58,] 58 54 60
[59,] 59 54 60
[60,] 60 60 60
x这里有一个相当直接的方法(如果下面有任何值,则编辑为舍入到12):
以下是一种相当直接的方法(如果以下有任何值,则编辑为舍入到12):
如何处理<12的数字?如果你发布了预期输出,这会很有帮助。你能举一个明确的例子吗?那么你想找到6的两个倍数,其中包含一个给定的x?如何处理<12的数字?如果你发布了预期输出,这会很有帮助。你能举一个明确的例子吗?那么你想找到6的两个倍数,它包含一个给定的x吗?
> df
nums floors ceils
1 10 12 12
2 11 12 12
3 12 12 12
4 13 12 18
5 14 12 18
6 15 12 18
7 16 12 18
8 17 12 18
9 18 18 18
10 19 18 24
11 20 18 24