我有一个类似下面的dataframe:
df <- data.frame(a = c(1, 2, 3), b = c(4, 15, 6), c = c(7, 8, 19))
a b c
1 1 4 7
2 2 15 8
3 3 6 19
我想用每一列与前一列之间的差异替换每一列(同时保留第一列):
a b c
1 1 3 3
2 2 13 -7
3 3 3 13
我做到了,但看起来很丑:
df2 = df %>% t %>% as.data.frame %>%
mutate(across(everything(), ~ . - lag(.))) %>% t %>% as.data.frame() %>%
mutate(a = df$a)
在Python中,你可以指定一个axis
选项,告诉lag
延迟行或列,但我在R中没有找到类似的东西。
5条答案
按热度按时间x7rlezfr1#
你可以用一个减法来做:
5gfr0r5j2#
你也可以在转置 Dataframe 后使用
diff
:mv1qrgav3#
使用
rowwise
和unnest_wider
的tidyverse
方法aiqt4smr4#
不使用包:
它产生:
diff
计算单元格之间的差异,t()
将结果转置为正确的格式,data.frame()
再次将其绑定到第一列a
。您可能需要重命名第一列(此处命名为df.a
)。zyfwsgd65#
你可以试试