r - 创建一个新列,该列采用 R 中另一列的初始值
问题描述
我正在研究横截面数据集。我想创建一个名为“initial”的新列,它将包含另一列的初始值。更具体地说,对于每个国家,初始列在数据可用的第一年采用另一个称为“比率”的列的值,并将在所有剩余年份采用值 0。示例代码:
country <- c(rep(c("A","B","C","D"),each=5))
year <- c(1980:1984, 1980: 1984, 1980:1984, 1980:1984)
ratio <- runif(n = 20, min = 0.20, max = 0.40)
mydata <- data.frame(country, year, ratio)
mydata$ratio[[1]] <- NA
mydata$ratio[6:7] <- NA
mydata$ratio[16:18] <- NA
我想要获得的输出如下所示:
有没有办法在 R 中最好使用 dplyr 包来做到这一点?
首先十分感谢!
解决方案
利用dplyr::first
你可以做:
library(dplyr)
mydata %>%
group_by(country) %>%
mutate(initial = first(ratio[!is.na(ratio)]),
initial = ifelse(is.na(ratio) | ratio != initial, 0, initial)) %>%
ungroup()
#> # A tibble: 20 × 4
#> country year ratio initial
#> <chr> <int> <dbl> <dbl>
#> 1 A 1980 NA 0
#> 2 A 1981 0.387 0.387
#> 3 A 1982 0.257 0
#> 4 A 1983 0.366 0
#> 5 A 1984 0.328 0
#> 6 B 1980 NA 0
#> 7 B 1981 NA 0
#> 8 B 1982 0.227 0.227
#> 9 B 1983 0.331 0
#> 10 B 1984 0.341 0
#> 11 C 1980 0.292 0.292
#> 12 C 1981 0.344 0
#> 13 C 1982 0.387 0
#> 14 C 1983 0.251 0
#> 15 C 1984 0.292 0
#> 16 D 1980 NA 0
#> 17 D 1981 NA 0
#> 18 D 1982 NA 0
#> 19 D 1983 0.295 0.295
#> 20 D 1984 0.312 0
数据
set.seed(42)
country <- c(rep(c("A","B","C","D"),each=5))
year <- c(1980:1984, 1980: 1984, 1980:1984, 1980:1984)
ratio <- runif(n = 20, min = 0.20, max = 0.40)
mydata <- data.frame(country, year, ratio)
mydata$ratio[[1]] <- NA
mydata$ratio[6:7] <- NA
mydata$ratio[16:18] <- NA
推荐阅读
- powershell - 获取文件列表的属性
- performance - SSIS 增量负载性能
- java - Jar 文件未显示所有属性
- javascript - 如何使用 Flask 输出 $.get() 方法 JQuery
- android - 将 Intent 过滤器操作传递给 Audible
- javascript - javascript正则表达式仅从字符串内容中查找带有连字符的数字
- swift - 为什么我的 UIpickerView 现在需要 3 个小时才能完成构建?
- javascript - 我怎么知道何时显示对话框
- azure-cloud-services - 参考现有订阅创建服务
- javascript - 如何为从 javascript 到 Zoho Creator 的文件上传设置正文