R中的ifelse语句将值赋给新列

时间:2014-06-30 14:14:21

标签: if-statement

我是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")

如果有人能指出我正确的方向,我们将非常感激。

1 个答案:

答案 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的相应值,并且您的数据按照示例进行分组。