我想在每一行中的所有列中运行我的代码,并找出每一行有+ ve个变化和负变化。
+ ve更改表示与以前的值相比数量增加(例如:(1,3),(2,3)) -ve变化意味着与以前的值(例如:(3,2),(2,1))相比数量减少
样本数据:
答案 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