检测从数据帧中的上一列到新输出的更改

时间:2016-04-06 11:54:03

标签: r

我已经搜索过,找不到任何可以回答此问题的内容 - 抱歉,如果之前已经回答过的话!

我有行数值累积增加的数据。我希望能够检测这些值在哪些列中增加,并输出一个相同大小的新数据帧,当值改变时给出1,而当它不改变时给出0。

示例数据 -

a<- c(0,0,0,0,0)
b<- c(1,0,0,1,0)
c<- c(2,1,0,1,1)
d<- c(3,2,0,1,2)
e<- c(4,2,1,1,2)
df<- data.frame(a,b,c,d,e)
df

a b c d e
1 0 1 2 3 4
2 0 0 1 2 2
3 0 0 0 0 1
4 0 1 1 1 1
5 0 0 1 2 2

所需的输出 -

  ad bd cd dd ed
1  0  1  1  1  1
2  0  0  1  1  0
3  0  0  0  0  1
4  0  1  0  0  0
5  0  0  1  1  0

我尝试了以下方面的想法 -

 dfNew<- lapply(ifelse(df>=identical[,c(x)], 1, 0))

但显然这不起作用(我有点像新手)。很感谢任何形式的帮助!

3 个答案:

答案 0 :(得分:2)

如果要获得行方差异,可以使用rowDiffs中的matrixStats

library(matrixStats)
`colnames<-`(cbind(df[1],rowDiffs(as.matrix(df))),
                     paste0(names(df), "d"))
#  ad bd cd dd ed
#1  0  1  1  1  1
#2  0  0  1  1  0
#3  0  0  0  0  1
#4  0  1  0  0  0
#5  0  0  1  1  0

答案 1 :(得分:1)

可能是通过行diff行找到了

cbind(a = 0, t(apply(df, 1, diff)))
#     a b c d e
#[1,] 0 1 1 1 1
#[2,] 0 0 1 1 0
#[3,] 0 0 0 0 1
#[4,] 0 1 0 0 0
#[5,] 0 0 1 1 0

答案 2 :(得分:0)

这将完成主要工作

+sapply(2:ncol(df), function(i) df[,i]>df[,i-1])

它将返回一个矩阵,您需要修复列名