r - 使用另一列值创建新列
问题描述
我有一个如下所示的数据集:
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
解决方案
我们可以使用lead
with mutate
indplyr
library(dplyr)
data %>%
mutate(B = lead(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
基于OP的代码,让我们尝试一下list
slotfinal <- list(data, data)
for(i in seq_along(slotfinal)) slotfinal[[i]] <- slotfinal[[i]] %>%
mutate(B = lead(A))
slotfinal
#[[1]]
# 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
#[[2]]
# 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
推荐阅读
- shell - cat << EOF > ~/.zshrc 无法将原始内容转换为文件
- python - 通过 UDPSocket 从相机 pi 发送图像捕获的问题
- python - z/OS 大型机上 USS 中的 Python 代码 - 方括号无法识别
- c# - 为什么 Xero Private 应用程序不断收到消费者密钥被拒绝的错误
- rust - Rust 中的 Atbash 密码
- c++ - Why does foreach in C++ can't traverse the first element?
- c++ - How to transfer half of the array to another array with different size?
- kubernetes - Linkerd 控制平面吊舱不会出现在 EKS 上
- apache-spark - 来自 Spark 安装的 Pyspark VS Pyspark python 包
- tfs - TFS (Azure DevOps) On prem upgrade 2018 to 2019 问题