创建新变量(值为rep(c(1,2),具体取决于其他变量中的重复值)

时间:2017-04-07 13:44:27

标签: r

我对R比较陌生,目前正致力解决以下问题:

我的数据框集或多或少的结构如下:

    Filename                     
    F_W07FP_W10HS_TalkTurns_I1.docx        0
    F_W07FP_W10HS_TalkTurns_I1.docx        1
    F_W07FP_W10HS_TalkTurns_I1.docx        2
    F_S02BE_G04KH_TalkTurnsI1.docx         1
    F_S02BE_G04KH_TalkTurnsI1.docx         1
    F_S02BE_G04KH_TalkTurnsI1.docx         1
    F_S02BE_G04KH_TalkTurnsI1.docx         2
    F_S02BE_G04KH_TalkTurnsI1.docx         3
    F_L05RJ_L11SM_Talk TurnsI1.docx        5 
    F_L05RJ_L11SM_Talk TurnsI1.docx        2
    F_L05RJ_L11SM_Talk TurnsI1.docx        1

现在我想添加一个重复值为c(1,2)的新列,如果我只这样做,它可以正常工作:

    data_rLSM[,length(data_rLSM[1,])+1] <-rep(c(1,2)) 

但是在我的最终数据集中,我需要根据第一行中的值再次启动值1,2。因此,当第一列中的值发生变化时,我需要R重新开始计数。文件名始终是我的第一列,而扬声器总是添加在最后一列的后面。最后它应该是这样的:

    Filename                               x   Speaker
    F_W07FP_W10HS_TalkTurns_I1.docx        0   1 
    F_W07FP_W10HS_TalkTurns_I1.docx        1   2 
    F_W07FP_W10HS_TalkTurns_I1.docx        2   1 
    F_S02BE_G04KH_TalkTurnsI1.docx         1   1
    F_S02BE_G04KH_TalkTurnsI1.docx         1   2
    F_S02BE_G04KH_TalkTurnsI1.docx         1   1
    F_S02BE_G04KH_TalkTurnsI1.docx         2   2 
    F_S02BE_G04KH_TalkTurnsI1.docx         3   1
    F_L05RJ_L11SM_Talk TurnsI1.docx        5   1
    F_L05RJ_L11SM_Talk TurnsI1.docx        2   2 
    F_L05RJ_L11SM_Talk TurnsI1.docx        1   1

我一直在尝试这个:

for(i in 1:name)

{
data_rLSM[length(data_rLSM[1,])+1] <-rep_len(c(1,2), length.out = length(unique(data_rLSM[,i]))
 }

但说实话,我完全不知道自己在做什么。我真的很感激一些好的想法或方法来解决我的问题:)

谢谢!

1 个答案:

答案 0 :(得分:0)

让我们从数据集开始:

df <- data.frame(filename = c(rep('a', 3), rep('b', 4), rep('c', 2)))

然后:

require(dplyr)
df <- df %>%
  group_by(., filename) %>%
  mutate(., Speaker = rep(c(1, 2), length.out = n()))

我们完成了!