我有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
中的值的同时(即州名)。有人可以帮我吗?!
答案 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])