我有一个数据库 ag_prod4,其结构如下:
country item element 1961 1962 ... 2021
usa corn Area 5 6 ... 8
usa corn Prod 8 4 ... 2
usa corn Yield 8 4 ... 2
usa oil Prod 8 4 ... 2
.
.
我想为每个国家项目组(例如:美国玉米)创建一个包含“效率”元素的新行,即每年的产品/区域。 注意:有时每个国家/地区项目组合的元素多于/少于三个,或者它们的顺序不同
这是我到目前为止所拥有的:
ag_prod4 %>% group_by(country, item) %>%
summarize(
element = c(unique(element),"efficiency"),
across(starts_with("1961"):starts_with("2021"),
~ ifelse(element=="efficiency",VALUE,.))
) %>% ungroup()
这已经差不多了,但我需要用一些东西来代替 VALUE,对于 1961 年,该值将采用美国玉米产量/美国玉米面积。
非常感谢您的帮助!这是我第一次发帖,但我很困惑
library(dplyr); library(tidyr)
data.frame(
stringsAsFactors = FALSE,
check.names = FALSE,
country = c("usa", "usa", "usa", "usa"),
item = c("corn", "corn", "corn", "oil"),
element = c("Area", "Prod", "Yield", "Prod"),
`1961` = c(5L, 8L, 8L, 8L),
`1962` = c(6L, 4L, 4L, 4L),
`2021` = c(8L, 2L, 2L, 2L)
) |>
pivot_longer(`1961`:`2021`) |>
pivot_wider(names_from = element, values_from = value) |>
mutate(efficiency = Prod / Area)
结果
# A tibble: 6 × 7
country item name Area Prod Yield efficiency
<chr> <chr> <chr> <int> <int> <int> <dbl>
1 usa corn 1961 5 8 8 1.6
2 usa corn 1962 6 4 4 0.667
3 usa corn 2021 8 2 2 0.25
4 usa oil 1961 NA 8 NA NA
5 usa oil 1962 NA 4 NA NA
6 usa oil 2021 NA 2 NA NA