我正在尝试使用ddply mutate
函数向数据帧的特定行添加1。
具体问题
当trackName
为experimenterTalk
时,如何将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