【问题标题】:Subtract columns when column name is a year当列名是一年时减去列
【发布时间】:2021-12-24 14:03:13
【问题描述】:

我确定这个问题的答案很简单,但我想不通。

我有一个数据透视表,其中列标题是年份。


# A tibble: 3 x 5

country  2012  2013  2014  2015 
<chr>    <dbl> <dbl> <dbl> <dbl>
USA      45    23    12    42
Canada   67    98    14    25
Mexico   89    104   78    3  

我想创建一个新列来计算其他两列之间的差异。然而,R 并没有将年份识别为列标题,而是取两年之间的差值。

以下是我的代码示例。如果我把“”放在这些年里,我会得到一个错误:“x non-numeric argument to binary operator”。如果没有“”,R 会创建一个值为 -3 的新列,只需减去年份即可。


df %>%
  pivot_wider(names_from = year, values_from = value) %>%
  mutate(diff = 2012 - 2015)

我如何重写它以获得下表:


# A tibble: 3 x 6

country  2012  2013  2014  2015  diff
<chr>    <dbl> <dbl> <dbl> <dbl> <dbl>
USA      45    23    12    47    -2
Canada   67    98    14    25    42
Mexico   89    104   78    3     86

【问题讨论】:

  • 四位数年份不是有效的 R 标识符。但是 - 如您所见 - 您仍然可以使用非法标识符创建列。然后你想引用一个带有非法标识符的列,只需将列名括在反引号中 - 例如mutate(diff = `2012` - `2015`)
  • 谢谢!我知道答案很简单。

标签: r dplyr tidyverse


【解决方案1】:

你可以试试

df  %>%
  pivot_wider(names_from = year, values_from = value) %>%
  mutate(diff = .$'2012' - .$'2015')

使用您的数据,

df <- read.table(text = "country  2012  2013  2014  2015 

USA      45    23    12    42
Canada   67    98    14    25
Mexico   89    104   78    3  
", header = T)
names(df) <- c("country",  2012,  2013,  2014,  2015 )

df  %>%
  mutate(diff = .$'2012' - .$'2015')

  country 2012 2013 2014 2015 diff
1     USA   45   23   12   42    3
2  Canada   67   98   14   25   42
3  Mexico   89  104   78    3   86

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 2015-09-19
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多