>我正在研究财务数据,其中我已经将多个 excel 工作表读取到 R 中,每个工作表都包含来自不同城市的财务数据。
我的要求是我需要将两个"费用":labor_cost和medical_cost添加到一行中,并将该行附加到列表中每个数据帧中的现有"收入"行
示例数据:
> city1 = data.frame(parameters = c('revenue','labor_cost','medical_cost'), Oct_values = rnorm(3,100), Nov_values = rnorm(3,100))
> city2 = data.frame(parameters = c('revenue','labor_cost','medical_cost'), Oct_values = rnorm(3,100), Nov_values = rnorm(3,100))
> city3 = data.frame(parameters = c('revenue','labor_cost','medical_cost'), Oct_values = rnorm(3,100), Nov_values = rnorm(3,100))
>
> mylist = list(city1 = city1, city2 = city2, city3 = city3)
> mylist
$city1
parameters Oct_values Nov_values
1 revenue 100.5933 100.38287
2 labor_cost 101.9234 100.34488
3 medical_cost 101.1133 99.75158
$city2
parameters Oct_values Nov_values
1 revenue 99.55789 99.78549
2 labor_cost 97.75944 99.18051
3 medical_cost 100.15035 99.34675
$city3
parameters Oct_values Nov_values
1 revenue 100.85301 97.43272
2 labor_cost 98.87698 100.77948
3 medical_cost 101.24935 99.49057
>
> mylist <- lapply(mylist, function(x) { x1 = x[,-1]
+ rownames(x1) = x[,1]
+ x1
+ })
>
> mylist <- lapply(mylist, function(x) { for(i in 1:ncol(x))
+ x[[i]] = as.numeric(as.character(x[[i]]))
+ x
+ } )
>
> lapply(mylist, function(x) x[2,] + x[3,])
$city1
Oct_values Nov_values
labor_cost 203.0368 200.0965
$city2
Oct_values Nov_values
labor_cost 197.9098 198.5273
$city3
Oct_values Nov_values
labor_cost 200.1263 200.27
我需要将上述结果附加到列表中每个数据帧中的"收入"行。
预期产出:
mylist[[1]]
Oct_values Nov_values
revenue 100.5933 100.38287
labor_cost 203.0368 200.0965
您可以将lapply
与cbind
一起使用,rbind
lapply(mylist, function(x) cbind(parameter = c('revenue', 'labor_cost'),
rbind(x[1, -1], x[2, -1] + x[3, -1])))
#$city1
# parameter Oct_values Nov_values
#1 revenue 99.4395 100.071
#2 labor_cost 201.3285 201.844
#$city2
# parameter Oct_values Nov_values
#1 revenue 100.461 99.5543
#2 labor_cost 198.048 201.5839
#$city3
# parameter Oct_values Nov_values
#1 revenue 100.401 101.787
#2 labor_cost 199.555 198.531
数据
set.seed(123)
city1 = data.frame(parameters = c('revenue','labor_cost','medical_cost'),
Oct_values = rnorm(3,100), Nov_values = rnorm(3,100))
city2 = data.frame(parameters = c('revenue','labor_cost','medical_cost'),
Oct_values = rnorm(3,100), Nov_values = rnorm(3,100))
city3 = data.frame(parameters = c('revenue','labor_cost','medical_cost'),
Oct_values = rnorm(3,100), Nov_values = rnorm(3,100))
mylist = list(city1 = city1, city2 = city2, city3 = city3)