【发布时间】:2021-02-23 06:32:00
【问题描述】:
我最近尝试根据两个变量匹配 相邻 数据框中的相同行(下面的 Condition1 和 Outcome1)。我见过有人对所有行执行此操作,但不是对相邻行执行此操作,这就是为什么我开发了以下三步解决方法(我希望不会过度思考):
-我滞后了我希望进行匹配的变量。
-我比较了变量和滞后变量
-我删除了所有相同的行(并删除了剩余的不必要的列)。
Case <- c("Case 1", "Case 2", "Case 3", "Case 4", "Case 5")
Condition1 <- c(0, 1, 0, 0, 1)
Outcome1 <- c(0, 0, 0, 0, 1)
mwa.df <- data.frame(Case, Condition1, Outcome1)
new.df <- mwa.df
Condition_lag <- c(new.df$Condition1[-1],0)
Outcome_lag <- c(new.df$Outcome1[-1],0)
new.df <- cbind(new.df, Condition_lag, Outcome_lag)
new.df$Comp <- 0
new.df$Comp[new.df$Outcome1 == new.df$Outcome_lag & new.df$Condition1 == new.df$Condition_lag] <- 1
new.df <- subset(new.df, Comp == 0)
new.df <- subset(new.df, select = -c(Condition_lag, Outcome_lag, Comp))
这工作得很好。但是当我尝试为这个创建一个函数时,因为我必须对大量的数据帧进行这个操作,我遇到了lag不起作用的问题(即未执行condition_lag <- c(new.df$condition[-1],0) 和outcome_lag <- c(new.df$outcome[-1],0) 操作)。功能代码为:
FLC.Dframe <- function(old.df, condition, outcome){
new.df <- old.df
condition_lag <- c(new.df$condition[-1],0)
outcome_lag <- c(new.df$outcome[-1],0)
new.df <- cbind(new.df, condition_lag, outcome_lag)
new.df$comp <- 0
new.df$comp[new.df$outcome == new.df$outcome_lag & new.df$condition == new.df$condition_lag] <- 1
new.df <- subset(new.df, comp == 0)
new.df <- subset(new.df, select = -c(condition_lag, outcome_lag, comp))
return(new.df)
}
关于函数的使用,我写了new.df <- FLC.Dframe(mwa.df, Condition1, Outcome1)。
有人可以帮我解决这个问题吗?非常感谢。
【问题讨论】:
-
感谢您的帮助。我调查了一下,这似乎在基于 one 变量进行匹配时有效。但是,我需要比较 两个(或更多) 变量。
-
然后勾选
data.table::rleid这个函数,可以指定多个变量 -
再次感谢!我尽了最大努力,但我无法用
rleid()编写代码来解决问题。请问你会怎么做? [另外,请问您是否知道我上面的功能为什么不起作用?]