两个数据帧之间按元素的百分比变化

时间:2018-09-27 13:20:55

标签: r dataframe

我有2个数据帧,具有相等数量的匹配列和行。例如:

df.2010 <- data.frame(col1 = c("Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia"), col2 = 10, col3 = 20, col4 = 30)

df.2017 <- data.frame(col1 = c("Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia"), col2 = 20, col3 = 25, col4 = 90)

df.2010
                  col1 col2 col3 col4
1          Connecticut   10   20   30
2             Delaware   10   20   30
3 District of Columbia   10   20   30
4              Florida   10   20   30
5              Georgia   10   20   30

df.2017
                  col1 col2 col3 col4
1          Connecticut   20   25   90
2             Delaware   20   25   90
3 District of Columbia   20   25   90
4              Florida   20   25   90
5              Georgia   20   25   90

我需要创建一个新的数据框,其中每个值的百分比从df.2010变为df.2017

预期结果:

                  col1 col2 col3 col4
1          Connecticut  100   25  200
2             Delaware  100   25  200
3 District of Columbia  100   25  200
4              Florida  100   25  200
5              Georgia  100   25  200

概念功能将是:

# args:
#  x: original amount
#  y: new amount
percent.change <- function(x,y) {
  ((y-x)/x)*100
}

我已经对*apply函数族和for循环进行了一些研究,但是我对R不够了解,无法到达我想要的位置!特别是在保留col1中的值的同时(即州名)。有人可以帮我吗?!

1 个答案:

答案 0 :(得分:3)

对于相同大小的数据帧,定义了逐元素算法。因此,可以方便地通过以下方式计算百分比变化:

## remove `col1` as it is not numeric
100 * (df.2017[-1] - df.2010[-1]) / df.2010[-1]

以下内容将col1添加回了

data.frame(df.2017[1], 100 * (df.2017[-1] - df.2010[-1]) / df.2010[-1])