在数据框的一行中查找任何更改

时间:2018-07-09 12:31:22

标签: r

我想在每一行中的所有列中运行我的代码,并找出每一行有+ ve个变化和负变化。

+ ve更改表示与以前的值相比数量增加(例如:(1,3),(2,3)) -ve变化意味着与以前的值(例如:(3,2),(2,1))相比数量减少

样本数据:

enter image description here

2 个答案:

答案 0 :(得分:1)

使用tidyverse:

library(tidyverse)
df1 <- gather(df,k,v,-PID)
inner_join(df1  %>% group_by(PID) %>% summarise(n=sum(as.integer(v>lag(v)),na.rm=TRUE)),
           df1  %>% group_by(PID) %>% summarise(n=sum(as.integer(v<lag(v)),na.rm=TRUE)),by="PID")
## A tibble: 4 x 3
#  PID     n.x   n.y
#  <fct> <int> <int>
#1 abc       4     3
#2 def       2     3
#3 hij       0     0
#4 klm       3     2

答案 1 :(得分:0)

使用基数r :(我自己创建了一个示例数据集)

set.seed(2)
PID <- as.data.frame(matrix(sample(c(1,2,3), 40, T), nrow = 4))

PID$poschanges <- colSums(apply(PID, 1, diff) > 0)
PID$negchanges <- colSums(apply(PID, 1, diff) < 0)

PID

  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 poschanges negchanges
1  2  1  3  2  2  1  1  1  2   3          3          3
2  3  3  2  2  1  2  2  1  2   1          2          4
3  1  3  3  2  1  3  3  1  3   3          3          3
4  2  1  2  1  2  3  2  3  3   2          4          4