複数の列を持つデータフレームがあります。そのうちのいくつかはchron
を使用して 'time'クラスに変更する必要があります。基本的な統計。これらの列は現在、文字として保存され、hh:mmのように書式設定されています。データフレームの複数の列をクラス '文字'からクラス '時間'に変更する
> Data
DATE FLT TYPE REG AC DEP ARR STD STA ATD ATA
1 15-01-02 953 J C-GCPT 73M YVQ YEV 12:00 12:55 13:00 13:59
2 15-01-04 953 J C-GCPT 73M YVQ YEV 12:00 12:55 13:17 14:13
3 15-01-05 953 J C-GCPT 73M YVQ YEV 12:00 12:55 13:20 14:14
Time_list <-c("STD","STA","ATD","ATA")
私は1つの列のみを変更するためにやっていることである(そしてそれが動作します):ここで
はそれのサブセットと同様に変更する必要がある列のリストであるData$ATA <- paste0(Data$ATA, ':00')
Data$ATA<-chron(times.=Data$ATA)
class(Data$ATA)
[1] "times"
しかし、多くの列が存在するので、すべての列を同時に実行できるようにすることをお勧めします。私は複数のテクニックを試しましたが、いくつかは最初のパートでは ':00'を貼り付けているようですが、2番目のパートでは常にchron
を使って間違っています。私はfor
ループ
apply
YEVdata[,(Time_list)] <- lapply(YEVdata[,(Time_list)], paste0,':00')
Data[,(Time_list)] <- lapply(Data[,(Time_list)], chron, times. =Data[,(Time_list)])
**Error in FUN(X[[i]], ...) :
X[[i]] and Data[, (Time_list)] must have equal lengths**
を使用してdmap
Data[,Time_list]<-
Data%>%
select(one_of(Time_list)) %>%
dmap(paste0,':00')
Data[,Time_list]<-
Data %>%
select(one_of(Time_list)) %>%
dmap(chron,times.=Data[,Time_list])
**Error in .f(.d[[i]], ...) :
.d[[i]] and Data[, Time_list] must have equal lengths**
を使用して、私は
を理解していない長さの問題を持っているように見えます
私はforループを使ってみましたが、私はちょっと初心者でどこにでも行くことができました。
- 別のスタックオーバーフローの質問から「シンプルな」ソリューションを使用する。
ちょうど混乱を招き、貼り付けてしまった。
Efficiently transform multiple columns of a data frame
平易初心者言語での任意のアイデアは非常に高く評価されるだろう!両方の操作をネストすることができれば、それはさらに良いでしょう!
基本的な古い 'lapply'はそれを行う必要があります - 'データ[Time_list] < - lapply(データ[Time_list]、機能(x)の回(paste0(データ$ ATA、 ":00"))) ' – thelatemail
Joshのリンクされた質問の回答と本質的に同じです - http://stackoverflow.com/a/17453493/496803 - 'lapply(...' – thelatemail
@thelatemailを開始した行、私はそれを試みましたが、まだエラーが出ます:データのエラー$ ATA:オブジェクト型の閉鎖は不可能 – lcabral