我是R的新手,如果这是一个简单的问题,请道歉。我目前正在我的数据中创建新列,我想知道如何根据“ContourFix”中的值分配值1或0,但它将扩展到整个“试用”。
这是我的数据:
Trial <- c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3)
ContourFix <- c(1, 0, 0, 0, 0, 1, 0, 1, 0, 0)
Data <- cbind(Trial, ContourFix)
以下是我希望在正确分配列后我的数据的样子:
Trial <- c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3)
ContourFix <- c(1, 0, 0, 0, 0, 1, 0, 1, 0, 0)
TrialFix <- c(1, 1, 1, 1, 0, 1, 1, 1, 1, 1)
FinalData <- cbind(Trial, ContourFix, TrialFix)
我已经开始使用ifelse语句来创建我的新列,但我不确定如何为其余的试验分配1:
Data$TrialFix <- with(Data,
ifelse(ContourFix == "1", "1", "0")
如果有人能指出我正确的方向,我们将非常感激。
答案 0 :(得分:0)
以下内容应该有效;
Trial <- c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3)
ContourFix <- c(1, 0, 0, 0, 0, 1, 0, 1, 0, 0)
trial.ends <- c(which(diff(Trial)==1),length(Trial))
one.starts <- which(ContourFix ==1)
TrialFix <- rep(0,length(Trial))
for (i in 1:length(one.starts)){
TrialFix[one.starts[i]:trial.ends[i]] <- 1
}
它有点hacky但应该服务于你的目的。它要求每组试验至少具有一个ContourFix的相应值,并且您的数据按照示例进行分组。