R:根据查找同一个表

时间:2018-06-13 16:30:45

标签: r dplyr mutate

我在R与dplyr一起工作。示例df:

set.seed(43)
x <- data.frame(Country = rep(c("China","USA","France"), each = 3),
                Year = rep(2003:2005,3)
                Value = sample(0:10, 9, replace = TRUE))

X:

Country Year Value
  China 2003     4
  China 2004    10
  China 2005     8
    USA 2003     1
    USA 2004     3
    USA 2005     1
 France 2003     5
 France 2004     0
 France 2005     7

我想创建另一个列,显示给定国家/地区和年份的一年差异,其中起始年份应为NA:

Country Year Change Value
  China 2003     NA     4
  China 2004      6    10
  China 2005     -2     8
 France 2003     NA     5
 France 2004     -5     0
 France 2005      7     7
    USA 2003     NA     1
    USA 2004      2     3
    USA 2005     -2     1

理想的解决方案是,在单个mutate()语句中,使用行的YearCountry来查找前一年的行的Value在同一个国家,然后计算差异。我不确定这是否可行。我有一个工作(可怕)的解决方案,依赖于传播/收集数据:

x %>% 
  spread(Year,Value) %>% 
  transmute(Country,
            `2005` = `2005` - `2004`,
            `2004` = `2004` - `2003`,
            `2003` = NA) %>%
  gather("Year","Change", 2:4) %>% 
  mutate(Year = as.integer(Year)) %>% 
  left_join(x) %>% 
  arrange(Country, Year)

然而,在我的实际数据中,有多年的代表性,有些国家的价值观比其他国家多。我还将不仅仅需要匹配的Country键值。是否有更简洁的方法来进行此计算?

0 个答案:

没有答案