以两个其他列的字符值为条件创建新列

时间:2017-06-09 14:52:53

标签: r

我只是R的学习者,并且有一个相当基本的问题。

我有一个名为edata的数据集,其中有两列与发布的问题相关。这些是GazeCue和TargetLocation。我希望创建一个名为CueType的新列,根据其他两列的值显示为“Cued”或“Uncued”。

当GazeCue等于RightGazePic1.png且TargetLocation等于TargetR时,新的CueType列应显示为“Cued”。类似地,当GazeCue等于LeftGazePic1.png且TargetLocation等于TargetL时,CueType列应再次显示为“Cued”。任何其他值的变化都应该在CueType中显示为“uncued”。

我想要的一个例子粘贴在下面。

GazeCue                  TargetLocation            CueType         

RightGazePic1.png        TargetR                   Cued             
LeftGazePic1.png         TargetL                   Cued             
RightGazePic1.png        TargetL                   Uncued           
LeftGazePic1.png         TargetR                   Uncued          

我一直在尝试使用ifelse完成此代码,但没有运气。任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

这是非常基本的。一种方法是从png和Target中提取L和R,并使用ifelse进行比较:

CueType <- ifelse(substr(GazeCue, 1,1) == substr(TargetLocation, 7,7),
                  "Cued",
                  "Uncued")

如果名称可能会有所不同,请在进行比较之前先查看gsub从字符串中提取相关信息。

答案 1 :(得分:1)

你也可以利用R回收载体的事实:

ix <- (substr(df$GazeCue,1,1) == substring(df$TargetLocation,7)) + 1
df$CueType <- c("Uncued","Cued")[ix]

答案 2 :(得分:0)

你可以试试这个:

edata[,3] <- NA #add a new column
names(edata)[3] <- "CueType" #add a name column

for (i in 1 : nrow(edata)) {
  if (edata$GazeCue[i] == 'RightGazePic1.png' & edata$TargetLocation[i]==
'TargetR') {
    edata[i,3] <- "Cued"
  } else if (edata$GazeCue[i] == 'LeftGazePic1.png' & data$TargetLocation[i]
=='TargetL') {
    edata[i,3] <- "Cued"
  }
  else {
    edata[i,3] <- "Uncued"
  }
}

测试,它应该正常工作!

相关问题