Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的ddply中使用transform添加新列_R_Plyr - Fatal编程技术网

在R中的ddply中使用transform添加新列

在R中的ddply中使用transform添加新列,r,plyr,R,Plyr,我正在使用一个数据集,其中车辆ID会随时间重复。单个车辆的示例如下所示: df <- data.frame(veh = rep(2,15), lane=c(rep(3,5), rep(4,5), rep(5,5)), frame=1:15) df-ddply(df'veh',transform,change=c(NA,ifelse(diff(df$lane)!=0,“yes”,“)) 可变车道 1 2 3 1 2 2 3 2 . 3

我正在使用一个数据集,其中车辆ID会随时间重复。单个车辆的示例如下所示:

df <- data.frame(veh = rep(2,15), lane=c(rep(3,5), rep(4,5), rep(5,5)), frame=1:15)
df-ddply(df'veh',transform,change=c(NA,ifelse(diff(df$lane)!=0,“yes”,“))
可变车道
1    2    3     1   
2    2    3     2      .
3    2    3     3      .
4    2    3     4      .
5    2    3     5      .
6 2 4 6是的
7    2    4     7      .
8    2    4     8      .
9    2    4     9      .
10   2    4    10      .
11 2 5 11是的
12   2    5    12      .
13   2    5    13      .
14   2    5    14      .
15   2    5    15      .
这给了我想要的输出。然而,在我的原始数据集中,有更多的车辆ID(“df中的veh”)。第一个车辆id“14”重复455次,总行数为23454。当我对原始数据集使用相同的函数时,我得到以下错误:

> hv1 <- ddply(hv, 'Vehicle.ID', transform,change=c(NA,ifelse(diff(hv$Lane)!=0,"yes","." )))
Error in data.frame(list(Vehicle.ID = c(14L, 14L, 14L, 14L, 14L, 14L,  : 
  arguments imply differing number of rows: 455, 23454

>hv1这不需要
ddply
,因为这是一个简单的向量问题。尝试使用
diff
和简单索引:

do.call('rbind', lapply(split(df, df$veh), function(z){
    z$change <- c(NA, diff(z$lane))
    z$change[z$change==1]<-'yes'
    z$change[z$change==0]<-'.'
}))
do.call('rbind',lappy(拆分(df,df$veh),函数(z){

z$change去掉
hv$
;否则
transform
将尝试插入数据帧中的整个列,而不是
ddply
@BrodieG作为第一个参数给出的部分。谢谢!删除hv$修复了问题。我认为问题是有多个车,因此需要按车进行某种拆分(使用
ave
,这就是我在这里要做的,或者使用plyr/data.table/dplyr软件包)。不过,我可能会误解。+1会让你达到10k;)因为我需要拆分多辆车,这就是为什么使用ddply。无论如何,谢谢。
do.call('rbind', lapply(split(df, df$veh), function(z){
    z$change <- c(NA, diff(z$lane))
    z$change[z$change==1]<-'yes'
    z$change[z$change==0]<-'.'
}))
> df
   veh lane frame change
1    2    3     1   <NA>
2    2    3     2      .
3    2    3     3      .
4    2    3     4      .
5    2    3     5      .
6    2    4     6    yes
7    2    4     7      .
8    2    4     8      .
9    2    4     9      .
10   2    4    10      .
11   2    5    11    yes
12   2    5    12      .
13   2    5    13      .
14   2    5    14      .
15   2    5    15      .