1

私はこのデータを持っています:

hhid    perid actNo thisAct from   to tripTime  
8019450     1     1    home  180 1051       NA  
8019450     1     2  school 1075 1245       24  
8019450     1     3  socrec 1255 1260       10  
8019450     1     4    home 1280 1619       20

今、私は3つの行を挿入したいと思っています

thisAct=travel
from=(from-tripTime-1)
to=(from-1)

次に、予想されるデータは次のようになります。

hhid    perid actNo thisAct from   to tripTime  
8019450     1     1    home  180 1051       NA  
*8019450    1     2  travel 1052 1074         
8019450     1     3  school 1075 1245       24  
*8019450    1     4  travel 1246 1254         
8019450     1     5  socrec 1255 1260       10  
*8019450    1     6  travel 1261 1279         
8019450     1     7    home 1280 1619       20  

これらの行にアスタリスクを挿入する方法を教えてください。

ありがとうございました。

4

2 に答える 2

3

データを再作成することから始めます。

dat <- read.table(text="
                  hhid    perid actNo thisAct from   to tripTime  
c     1     1    home  180 1051       NA  
8019450     1     2  school 1075 1245       24  
8019450     1     3  socrec 1255 1260       10  
8019450     1     4    home 1280 1619       20
                  ", header=TRUE)

次に、移動時間を計算し、データと同じ形状のデータフレームに配置します

travel <- data.frame(
  hhid = 8019450,
  perid = 1,
  actNo = NA,
  thisAct = "travel",
  from = head(dat$to + 1, -1),
  to   = tail(dat$from - 1, -1),
  tripTime = NA
)

次にrbind、並べ替えます。

x <- rbind(dat, travel)
x <- x[order(x$from), ]
x$perid <- seq_along(x$perid)
x

     hhid perid actNo thisAct from   to tripTime
1       c     1     1    home  180 1051       NA
5 8019450     2    NA  travel 1052 1074       NA
2 8019450     3     2  school 1075 1245       24
6 8019450     4    NA  travel 1246 1254       NA
3 8019450     5     3  socrec 1255 1260       10
7 8019450     6    NA  travel 1261 1279       NA
4 8019450     7     4    home 1280 1619       20
于 2012-10-24T08:11:01.097 に答える
1

あなたのデータ:

dat <- read.table(text="hhid perid actNo thisAct from to tripTime
8019450 1 1 home 180 1051 NA
8019450 1 2 school 1075 1245 24
8019450 1 3 socrec 1255 1260 10
8019450 1 4 home 1280 1619 20", header = TRUE, stringsAsFactors = FALSE)

これはあなたが望むものを得る方法です:

dat2<- dat[c(1, rep(2:nrow(dat), each = 2)), ]
dat2$actNo <- 1:nrow(dat2)
dat2[c(FALSE, TRUE), "thisAct"] <- "travel"
dat2[c(FALSE, TRUE), "to"] <- dat2[c(FALSE, TRUE), "from"] - 1
dat2[c(FALSE, TRUE), "from"] <- (dat2[c(FALSE, TRUE), "from"] -
                                 dat2[c(FALSE, TRUE), "tripTime"]) + 1    
dat2[c(FALSE, TRUE), "tripTime"] <- NA

列内の値tripTimeが指定されていないNAため、新しい列を選択しました。

出力:

#        hhid perid actNo thisAct from   to tripTime
# 1   8019450     1     1    home  180 1051       NA
# 2   8019450     1     2  travel 1052 1074       NA
# 2.1 8019450     1     3  school 1075 1245       24
# 3   8019450     1     4  travel 1246 1254       NA
# 3.1 8019450     1     5  socrec 1255 1260       10
# 4   8019450     1     6  travel 1261 1279       NA
# 4.1 8019450     1     7    home 1280 1619       20
于 2012-10-24T08:10:10.537 に答える