r-如何对数据帧中的一组特定数据执行mutate函数(ddply)



我正在尝试使用ddply mutate函数向数据帧的特定行添加1。

具体问题
trackNameexperimenterTalk时,如何将1添加到Duration(请参阅下面示例数据帧中的第9行)?

以下是我的数据帧的前几行。该数据帧的名称为data_all

    Time Duration               trackName Comment
   (int)    (dbl)                  (fctr)  (fctr)
1  10173    0.500      playingCaterpillar  (null)
2  11092    0.399          playingChewToy  (null)
3  11946    0.413      playingSpinFanHand  (null)
4  12862    0.382           playingMirror  (null)
5  13651    0.413        playingButtonFan  (null)
6  14423    0.394 playingButtonFiberLight  (null)
7  15241    0.378  playingTwoButtonLights  (null)
8  16052    0.534           playingMagnet  (null)
9   8833    0.000        experimenterTalk  (null)
10  9295    0.585               totalPlay  (null)

这是我的一个尝试:

    data_all_2 <- ddply(data_all, "trackName"=="experimenterTalk", mutate,
               Duration = Duration + 1
               )

但我收到了这个错误消息:

  Error in UseMethod("as.quoted") : 
  no applicable method for 'as.quoted' applied to an object of class "logical"

您试图在需要包含分组变量的地方对数据进行子集(筛选)。实际上,这里甚至不需要分组变量。例如,在下面的代码中,您可以执行.()而不是.(trackName)。但是,如果执行此操作,ddply将添加一个新的.id列,该列将填充NA

data_all_2 = ddply(data_all, .(trackName) , mutate,
      Duration = ifelse(trackName=="experimenterTalk", Duration + 1, Duration))

dplyr包速度更快,在很大程度上取代了plyr:

library(dplyr)
data_all_2 = data_all %>% 
  mutate(Duration = ifelse(trackName=="experimenterTalk", Duration + 1, Duration)))

在基地R,你可以做:

data_all$Duration[data_all$trackName=="experimenterTalk"] = 
          data_all$Duration[data_all$trackName=="experimenterTalk"] + 1

最新更新