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),…)
。将其与您的代码进行比较。您是否可以包含一些示例数据以使您的问题重现?这样可以更容易地找出名称更改的原因。