【发布时间】:2020-06-03 18:29:07
【问题描述】:
我有一个如下所示的数据集:
data <- data.frame(A = c(3.132324,12.3439085,3.34343,5.1239048,6.34323,3.342334,9.342343,134.132433,13.1234323,23.34323))
现在,我想使用 A 值创建一个新列 B,它基于 A 下一行的值。像这样:
A B
1 3.132324 12.343908
2 12.343908 3.343430
3 3.343430 5.123905
4 5.123905 6.343230
5 6.343230 3.342334
6 3.342334 9.342343
7 9.342343 134.132433
8 134.132433 13.123432
9 13.123432 23.343230
10 23.343230 NA
我尝试使用类似data$B <- c(tail(data$A, -1), NA)) 的代码,但我得到的小数位数不正确(例如,6 个小数点的值变成了 5 个小数点)。我希望 B 值完全遵循 A 值,其中包括小数点。
我该怎么做?
更新
这显示了我在实际数据集中遇到的问题,即当我使用 mutate() 函数时,B 变圆,正如@akrun 建议的那样。
A B
1 7.933333 16.01667
2 16.016667 24.53333
3 24.533333 34.70000
4 34.700000 NA
【问题讨论】:
-
您的代码适用于我,没有四舍五入问题
-
我认为这是打印格式问题。如果你检查
tibble(A = c(7.933333, 16.016667, 24.533333, 34.700000), B = lead(A)) %>% as.data.frame -> out;out$B[-nrow(out)] == out$A[-1]# [1] TRUE TRUE TRUE -
@akrun。你是对的!谢谢你。看起来这只是一个打印问题,而不是值的问题。
-
@JoshuaMire 我试过了。我的实际数据集有点复杂,因为我需要将 for 循环嵌套在另一个 for 循环中。
-
@Drew 如果要更改设置,请检查打印 tibble 输出的选项并指定要打印的小数点数