【问题标题】:Instantiating a conditional statement in R在 R 中实例化条件语句
【发布时间】:2013-01-18 12:40:35
【问题描述】:

我有一个如下所示的数据框:

> head(Data1A)
        Prime Target CorrectAnswer Accuracy   RT   Block TrialType
1     bezaaid barkme    PseudoWord        1 3450 Block 1        NA
2       hazen lemmet          Word        1 1108 Block 1        NA
3  bergtoppen slavin          Word        1 1160 Block 1        NA
4       wekte gareel          Word        1 1250 Block 1        NA
5      zessen studio          Word        1  557 Block 1        NA
6 nauwkeurige hotens    PseudoWord        1  882 Block 1        NA

如您所见,TrialType 列必须填充,我需要一个条件语句来完成。我知道我想要什么,并且尽我所能用伪代码写下来,但我距离能够以正确的语法实现它还有很长的路要走。任何帮助深表感谢。

伪代码:

对于Data1A$TrialType 中的每个单元格,如果Data1A$Block 中的对应单元格等于Block 2Block 3 并且Data1A$CorrectAnswer 中的对应行等于Word,或者如果Data1A$ 中的对应单元格块等于“块 4”或“块 5”,Data1A$CorrectAnswer 中的对应单元格等于 PseudoWord,那么 TrialType 中的对应单元格将等于 Regular 否则,如果 @987654333 中的对应单元格@ 等于Block 1Block 6 或如果Data1A$Block 中的对应单元格等于Block 2Block3 并且Data1A$CorrectAnswer 中的对应行等于pseudoWord 或如果对应的单元格在Data1A$Block 等于Block 4Block 5 并且Data1A$CorrectAnswer 中对应的单元格等于Word 那么Data1A$TrialType 中对应的单元格等于Random

我希望这是可以理解的。如果有人怀疑我对伪代码的意图,我将进行检查。

【问题讨论】:

    标签: r if-statement dataframe pseudocode


    【解决方案1】:

    我真的很想在这里简化您的逻辑。

    但这应该可以。

    我生成了一些数据

    dat <- read.table(text =        "Prime Target CorrectAnswer Accuracy   RT   Block TrialType
                      1     bezaaid barkme    PseudoWord        1 3450 'Block 4'        NA
                      2       hazen lemmet          Word        1 1108 'Block 5'        NA
                      3  bergtoppen slavin          Word        1 1160 'Block 4'        NA
                      1     bezaaid barkme    PseudoWord        1 3450 'Block 5'        NA
                      2       hazen lemmet          Word        1 1108 'Block 2'        NA
                      3  bergtoppen slavin          Word        1 1160 'Block 3'        NA
                      1     bezaaid barkme    PseudoWord        1 3450 'Block 2'        NA
                      2       hazen lemmet          Word        1 1108 'Block 3'        NA
                      3  bergtoppen slavin          Word        1 1160 'Block 1'        NA
                      4       wekte gareel          Word        1 1250 'Block 6'        NA
                      5      zessen studio          Word        1  557 'Block 1'        NA
                      6 nauwkeurige hotens    PseudoWord        1  882 'Block 3'        NA",header = T,row.names = NULL)
    

    那我实现你的逻辑:

    transform(dat,
              TrialType= ifelse(Block %in% c('Block 4','Block 5'),
                                ifelse(CorrectAnswer =="Word" ,"Random","Regular"),
                                ifelse(Block  %in% c('Block 2','Block 3'),
                                       ifelse(CorrectAnswer =="Word" ,"Regular","Random"),
                                       'Random')))
    

    这里是结果

      row.names       Prime Target CorrectAnswer Accuracy   RT   Block TrialType
    1          1     bezaaid barkme    PseudoWord        1 3450 Block 4   Regular
    2          2       hazen lemmet          Word        1 1108 Block 5    Random
    3          3  bergtoppen slavin          Word        1 1160 Block 4    Random
    4          1     bezaaid barkme    PseudoWord        1 3450 Block 5   Regular
    5          2       hazen lemmet          Word        1 1108 Block 2   Regular
    6          3  bergtoppen slavin          Word        1 1160 Block 3   Regular
    7          1     bezaaid barkme    PseudoWord        1 3450 Block 2    Random
    8          2       hazen lemmet          Word        1 1108 Block 3   Regular
    9          3  bergtoppen slavin          Word        1 1160 Block 1    Random
    10         4       wekte gareel          Word        1 1250 Block 6    Random
    11         5      zessen studio          Word        1  557 Block 1    Random
    12         6 nauwkeurige hotens    PseudoWord        1  882 Block 3    Random
    

    【讨论】:

    • 感谢您的帮助。不幸的是,代码没有做我想要的。这可能是我的错,因为我在伪代码中犯了一个错误(已经修复)。我的意思是指“CorrectAnswer”列的值,而不是“目标”列。其他一切都保持不变。不过,您的代码所做的是将 Random 分配给第 1、2 和 3 块的所有试验,并将常规分配给第 4 和 5 块的所有试验(在这个特定的 data.frame 中没有任何第 6 块单元格)
    • @Hernan_L 我用新的 data.frame 更新了我的答案,其中包含更多示例。请结果并告诉我哪一行不正确。?
    • 非常感谢@agstudy!当然,我只是将 'dat' 替换为我的 data.frame 的名称,但现在代码完美运行!非常感谢您的帮助,您为我节省了无数小时的体力劳动:)
    • @Hernan_L 如果您满意,您可以接受答案!通过选中左侧的框。
    • @Arun 你看到了吗!令人惊讶的是 OP 可以理解这种逻辑并用英语写作,但他不能使用 R 来做到这一点......
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2015-09-12
    • 2016-10-13
    • 2014-10-23
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多