在我的列的每一行中划分最后一行
Divide last row in each row of my columns
这是我的数据框:
Deta <- c("2010-01-29" , "2015-01-29", "2017-01-30")
v <- c(5.1, 3, 4)
a <- c(4.3, 2, 6)
z <- data.frame(Deta,v,a)
我想要这个公式的每一行中的 v 列和 a 列(最后一行/第 -1 行)。示例 ( 4 / 5.1 -1) 可以帮助我吗?
我用这个mutate_at(-1, c(z[last(z)])/z-1)
但是我有一个错误
这是输出:
Date a v
2010-01-29 -0.21569 0.3953
2015-01-29 0.33333 2.0000
2017-01-30 0.00000 0.00000
我们可以使用:
library(dplyr)
z %>% mutate_at(-1, ~last(.)/. - 1)
#Can also use
#z %>% mutate_at(vars(v, a), ~last(.)/. - 1)
或在基数 R 中:
z[-1] <- lapply(z[-1], function(x) x[length(x)]/x - 1)
我们可以使用data.table
library(data.table)
setDT(z)[, (2:ncol(z)) := lapply(.SD, function(x) last(x)/x - 1), .SDcols = -1]
z
# Deta v a
#1: 2010-01-29 -0.2156863 0.3953488
#2: 2015-01-29 0.3333333 2.0000000
#3: 2017-01-30 0.0000000 0.0000000
或使用base R
z[-1] <- mapply(`/`, tail(z[-1], 1), z[-1])-1
或矢量化
z[-1] <- (tail(z[-1], 1)[col(z[-1])]/z[-1] -1)
这是我的数据框:
Deta <- c("2010-01-29" , "2015-01-29", "2017-01-30")
v <- c(5.1, 3, 4)
a <- c(4.3, 2, 6)
z <- data.frame(Deta,v,a)
我想要这个公式的每一行中的 v 列和 a 列(最后一行/第 -1 行)。示例 ( 4 / 5.1 -1) 可以帮助我吗?
我用这个mutate_at(-1, c(z[last(z)])/z-1)
但是我有一个错误
这是输出:
Date a v
2010-01-29 -0.21569 0.3953
2015-01-29 0.33333 2.0000
2017-01-30 0.00000 0.00000
我们可以使用:
library(dplyr)
z %>% mutate_at(-1, ~last(.)/. - 1)
#Can also use
#z %>% mutate_at(vars(v, a), ~last(.)/. - 1)
或在基数 R 中:
z[-1] <- lapply(z[-1], function(x) x[length(x)]/x - 1)
我们可以使用data.table
library(data.table)
setDT(z)[, (2:ncol(z)) := lapply(.SD, function(x) last(x)/x - 1), .SDcols = -1]
z
# Deta v a
#1: 2010-01-29 -0.2156863 0.3953488
#2: 2015-01-29 0.3333333 2.0000000
#3: 2017-01-30 0.0000000 0.0000000
或使用base R
z[-1] <- mapply(`/`, tail(z[-1], 1), z[-1])-1
或矢量化
z[-1] <- (tail(z[-1], 1)[col(z[-1])]/z[-1] -1)