plyr中的转换函数是否更改变量名?

plyr中的转换函数是否更改变量名?,r,plyr,R,Plyr,我使用的数据集有两个和三个单词的变量名,中间有空格 > names(final.data1) ## [1] "Vehicle ID" "Frame ID" "Total Frames" ## [4] "Global Time" "Local X" "Local Y" ## [7] "Global X" "Global Y"

我使用的数据集有两个和三个单词的变量名,中间有空格

> names(final.data1)
##  [1] "Vehicle ID"           "Frame ID"             "Total Frames"        
##  [4] "Global Time"          "Local X"              "Local Y"             
##  [7] "Global X"             "Global Y"             "Vehicle Length"      
## [10] "Vehicle width"        "Vehicle class"        "Vehicle velocity"    
## [13] "Vehicle acceleration" "Lane"                 "Preceding Vehicle ID"
## [16] "Following Vehicle ID" "Spacing"              "Headway"             
## [19] "svel"                 "sacc"                 "PrecVehClass"
我没有改变名字,一直在做分析。当我使用
plyr
包的
transform
时,我得到了一些变量的两列,这些变量包含相同的数字,但名称不同

# Determining when the lane change occured
final.data1 <- ddply(final.data1, c("`Vehicle class`", "`Vehicle ID`"), transform, 
    lane.change = c(NA, ifelse(diff(Lane) != 0, "yes", ".")))
ordr <- with(final.data1, order(`Vehicle ID`))
final.data1 <- final.data1[ordr, ]  #sort in ascending order by vehicle ID
names(final.data1)
##  [1] "Vehicle class"        "Vehicle ID"           "Vehicle.ID"          
##  [4] "Frame.ID"             "Total.Frames"         "Global.Time"         
##  [7] "Local.X"              "Local.Y"              "Global.X"            
## [10] "Global.Y"             "Vehicle.Length"       "Vehicle.width"       
## [13] "Vehicle.class"        "Vehicle.velocity"     "Vehicle.acceleration"
## [16] "Lane"                 "Preceding.Vehicle.ID" "Following.Vehicle.ID"
## [19] "Spacing"              "Headway"              "svel"                
## [22] "sacc"                 "PrecVehClass"         "lane.change"
#确定何时发生车道变更

final.data1问题实际上在于
transform
,即“检查”变量名。如果在
ddply
调用中
transform
之后添加
check.names=FALSE
,我想你会得到你想要的。下面是一个玩具数据集示例

dat = data.frame("Vehicle class" = rep(c("a", "b"), each = 4), 
                 "Vehicle ID" = rep(c("c","d"), times = 4), 
                 Lane = sample(0:3, 8, replace = TRUE), 
                 "Vehicle Length" = runif(8, 0, 100), check.names = FALSE)

require(plyr)

# Using transform changes names in output data.frame
ddply(dat, .(`Vehicle class`, `Vehicle ID`), transform, 
    lane.change = c(NA, ifelse(diff(Lane) != 0, "yes", ".")))

# Adding check.names = FALSE to change this behavior
ddply(dat, .(`Vehicle class`, `Vehicle ID`), transform, check.names = FALSE,
    lane.change = c(NA, ifelse(diff(Lane) != 0, "yes", ".")))

我怀疑这与
ifelse
中的
有关。然而,我还没有完全理解,你在用
c(NA,ifelse(…)
做什么。写
lane.change=ifelse(diff(lane)!=0,“yes”,NA)
不是更有意义吗?它确实更有意义,但我的数据中的
NA
在不同的分析中给出了不同的含义,我不想混淆自己。我可以使用
no
我想,但是如果我将
指定给一个新变量
lane,为什么输入变量的名称会改变。改变
?为什么要使用
c(NA,ifelse(…)
?(我的意思是为什么不仅仅是它的
ifelse
部分)而且据我所知
plyr
,如果你想用两个变量分组,你可以写,例如,
ddply(final.data1,((Var1,Var2),…)
。将其与您的代码进行比较。您是否可以包含一些示例数据以使您的问题重现?这样可以更容易地找出名称更改的原因。