我已经搜索过,找不到任何可以回答此问题的内容 - 抱歉,如果之前已经回答过的话!
我有行数值累积增加的数据。我希望能够检测这些值在哪些列中增加,并输出一个相同大小的新数据帧,当值改变时给出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))
但显然这不起作用(我有点像新手)。很感谢任何形式的帮助!
答案 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])
它将返回一个矩阵,您需要修复列名