我的问题如下:我想在新数据帧中对每个数据帧的某些组合列进行子集化。我需要这样做,因为我希望每个DF分别进行进一步的计算。
1.我将我的数据组织在一个包含四个数据框的列表中,每个数据框包含一个变量一年。
nms <- c(paste0("tiva.EXGR.wide",c(1995,
2005)),paste0("tiva.VA.wide",c(1995, 2005)))
df.list <- lapply(nms, get)
数据框1:出口措施1,1995年,26列:
|COU |PAR | Time| C01T05| C10T14| C15T16|
|:---|:---|----:|------:|------:|------:|
|ARG |ARG | 1995| 0.00| 0.00| 0.00|
|ARG |AUS | 1995| 0.83| 0.17| 14.87|
|ARG |AUT | 1995| 1.66| 0.00| 2.59|
数据框2:出口措施2,1995年,26列:
|COU |PAR | Time| C01T05| C10T14| C15T16|
|:---|:---|----:|------:|------:|------:|
|ARG |ARG | 2005| 0.00| 0.00| 0.00|
|ARG |AUS | 2005| 2.50| 2.20| 22.48|
|ARG |AUT | 2005| 3.57| 0.09| 13.64|
如果我要为所有数据帧重复它,我可以这样做。
tive.VA.2005.10t14&lt; -tiva.VA.2005.wide [,c(1,2,5)]
所以结果看起来像这样:
|COU | ARG| AUS| AUT|
|:---|------:|----:|----:|
|ARG | 0.00| 2.20| 0.09|
|AUS | 492.73| 0.00| 8.36|
|AUT | 0.05| 0.50| 0.00|
|BEL | 0.26| 0.29| 1.30|
|BGR | 0.01| 0.02| 1.19|
|BRA | 823.07| 8.18| 0.92|
但我想以这样一种方式对其进行编程,以便运行循环并在新列表中创建数据框。在每个数据帧中,我想要包括三列,第一列和第二列来自列原始数据帧,然后是第三列,这些数据帧在每次迭代中继续运行。我试着这样做。
for (i in 4:26) {
EXGR.1995<-NULL
EXGR.2005<-NULL
EXGR.1995[[i]]<-(df.list[[1]][,c(1,2,i)])
EXGR.2005[[i]]<-(df.list[[3]][,c(1,2,i)])
}
答案 0 :(得分:0)
如果您将数据放在名为<?php
$opening_hours = [
"Monday" => ["09:00", "17:00"],
"Tuesday" => ["09:00", "17:00"],
"Wednesday" => ["08:00", "13:00"],
"Thursday" => ["09:00", "17:00"],
"Friday" => ["09:00", "17:00"],
"Saturday" => ["10:00", "16:00"],
"Sunday" => ["Closed"],
];
$amountOfDays = count($opening_hours);
$arrayKeys = array_keys($opening_hours);
for($dayCount = 0; $dayCount < $amountOfDays; $dayCount++) {
$DayAmountOfConsecutiveSameHours = 1;
while(isset($arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]) && ($opening_hours[$arrayKeys[$dayCount]] === $opening_hours[$arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours)]]))
$DayAmountOfConsecutiveSameHours++;
if($DayAmountOfConsecutiveSameHours > 1)
$result[$arrayKeys[$dayCount] . " - " . $arrayKeys[($dayCount+$DayAmountOfConsecutiveSameHours-1)]] = $opening_hours[$arrayKeys[$dayCount]];
else
$result[$arrayKeys[$dayCount]] = $opening_hours[$arrayKeys[$dayCount]];
$dayCount += ($DayAmountOfConsecutiveSameHours - 1);
}
print_r($result);
?>
的列表中,则可以轻松地将整个数据转换为数据框:
Array
(
[Monday - Tuesday] => Array
(
[0] => 09:00
[1] => 17:00
)
[Wednesday] => Array
(
[0] => 08:00
[1] => 13:00
)
[Thursday - Friday] => Array
(
[0] => 09:00
[1] => 17:00
)
[Saturday] => Array
(
[0] => 10:00
[1] => 16:00
)
[Sunday] => Array
(
[0] => Closed
)
)
然后你可以尝试重塑你想要的东西。