R 通过添加额外时间创建数据帧
我有一个长格式的数据帧(Main),我想在其中添加更多的天数,因为我可以在这些添加的天数内插入一个变量。Main有固定名称(type)、天(day1)、一个时不变变量(region)和一个需要插值的变量(value)R 通过添加额外时间创建数据帧,r,dataframe,interpolation,R,Dataframe,Interpolation,我有一个长格式的数据帧(Main),我想在其中添加更多的天数,因为我可以在这些添加的天数内插入一个变量。Main有固定名称(type)、天(day1)、一个时不变变量(region)和一个需要插值的变量(value) #Main dataframe Main<-data.frame(type=as.character( c("a","a","b","b"), stringsAsFactors=FALSE), day1=c(1,3,1,3), region=as.character( c("
#Main dataframe
Main<-data.frame(type=as.character( c("a","a","b","b"), stringsAsFactors=FALSE), day1=c(1,3,1,3), region=as.character( c("north","north", "south", "south"),stringsAsFactors=FALSE), Value=c(10, 30, 35, 50))
AA<-sapply(Main, is.factor)
Main[AA]<-lapply(Main[AA], as.character)
Main<- Main%>% arrange(type, day1)
#Dataframe that has additional days for interpolation
type<-unique(Main$type)
type<- rep(type, each=3)
day2<- rep(1:3,2)
Extra<-cbind(type, day2)
Extra<-data.frame(Extra)
#主数据帧
主使用合并:
merge(Extra, Main, by.x = c("type", "day2"),
by.y = c("type", "day1"),
all.x = T, all.y = T)
请阅读此文以澄清任何混淆:但请注意,在W3学校示例中,他们使用as作为表名别名,这不是此版本的SQL所要求的。@Hack-R请参阅第一段代码的第2/3行。有些列是factor类,我需要字符类。谢谢。我只是被“分类”这个词而不是“类”的用法弄糊涂了。谢谢。然而,我可能需要一个通用的解决方案,因为“a”和“b”只是为了说明,我有200多个公司名称。@runjumpfly你有多少个公司名称有什么关系?是否将type
的值与SQL语句中数据帧的任意别名混淆(我不知道sqldf@runjumpfly这只是SQL。您可以通过键入?sqldf
阅读更多内容。这可以扩展到任何数量的类型的值或任何字段。您可以有100万个公司名称,代码不会更改。请参阅我添加的一些详细信息。
merge(Extra, Main, by.x = c("type", "day2"),
by.y = c("type", "day1"),
all.x = T, all.y = T)
type day2 region Value
1 a 1 north 10
2 a 2 <NA> NA
3 a 3 north 30
4 b 1 south 35
5 b 2 <NA> NA
6 b 3 south 50
library(sqldf)
sqldf("select a.type,
b.day1,
a.day2,
b.region,
b.Value
from Extra a left join Main b on
a.type = b.type and a.day2 = b.day1")
type day1 day2 region Value
1 a 1 1 north 10
2 a NA 2 <NA> NA
3 a 3 3 north 30
4 b 1 1 south 35
5 b NA 2 <NA> NA
6 b 3 3 south 50
sqldf("select one.type,
two.day1,
one.day2,
two.region,
two.Value
from Extra one left join Main two on
one.type = two.type and one.day2 = two.day1")