问题描述
solve :-
length(X,6),% there are six students
member([manuel,19,_,_],X),% Manuel is 19 years old
member([_,20,win],% 20 years old student studies win
...
我想创建一个新的数据框(df2),使company列保持原样。 1980年和1983年的值应通过使用当前值减去先前值来计算。所以基本上,我想要一个产生滚动增量的数据帧。
df1 <- data.frame(Company = c('A','B','C','D','E'),`X1980` = c(1,5,3,8,13),`X1981` = c(20,13,23,11,29),`X1982` = c(33,32,31,41,42),`X1983` = c(45,47,53,58,55))
感谢您的帮助!如果我有什么办法可以改善这个问题,那就告诉我。
解决方法
您可以在每行的第一个值后加上m
。
NA
您还可以使用df1[-1] <- t(apply(df1[-1],1,function(x) c(NA,diff(x))))
df1
# Company X1980 X1981 X1982 X1983
#1 A NA 19 13 12
#2 B NA 8 19 15
#3 C NA 20 8 22
#4 D NA 3 30 17
#5 E NA 16 13 13
函数。
tidyverse
,
我们可以使用rowDiffs
中的matrixStats
library(matrixStats)
df1[-1] <- cbind(NA,rowDiffs(as.matrix(df1[-1])))
-输出
df1
# Company X1980 X1981 X1982 X1983
#1 A NA 19 13 12
#2 B NA 8 19 15
#3 C NA 20 8 22
#4 D NA 3 30 17
#5 E NA 16 13 13