在我的資料集中,我想將我的列號 56 重命名為 80。我沒有手動操作,而是創建了一個我希望將新名稱設定為的名稱串列。然后我運行一個 for 回圈,該回圈運行沒有任何錯誤,但是每一列都被重命名為我創建的串列中的最后一個值。關于我在這里做錯了什么的任何建議。請看下面我的代碼: -
要創建串列:-
mylist <- list("Jun-20", "Jul-20", "Aug-20", "Sep-20", "Oct-20",
"Nov-20", "Dec-20", "Jan-21", "Feb-21", "Mar-21", "Apr-21",
"May-21", "Jun-21", "Jul-21", "Aug-21", "Sep-21", "Oct-21",
"Nov-21", "Dec-21", "Jan-22", "Feb-22", "Mar-22", "Apr-22",
"May-22", "Jun-22")
然后我運行 for 回圈:-
for (j in 56:80) {
for (i in 1:length(mylist)) {
names(CNS7)[j] <- mylist[[i]]
}
}
這里的 j 值是我要重命名的列范圍(56 到 80)。我的最終結果是從 56 到 80 的所有列都重命名為“Jun-22”。
uj5u.com熱心網友回復:
names<-分配是矢量化的,即它可以將名稱分配給多于一列。
names(CNS7)[56:80] <- unlist(mylist)
注意colnamesornames都是向量。因此,構造一個向量會更直接
myvec <- c("Jun-20", "Jul-20", "Aug-20", "Sep-20", "Oct-20",
"Nov-20", "Dec-20", "Jan-21", "Feb-21", "Mar-21", "Apr-21",
"May-21", "Jun-21", "Jul-21", "Aug-21", "Sep-21", "Oct-21",
"Nov-21", "Dec-21", "Jan-22", "Feb-22", "Mar-22", "Apr-22",
"May-22", "Jun-22")
names(CNS7)[56:80] <- myvec
通過執行嵌套回圈,它會遍歷“j”中的每一列,length(mylist)因此,names在每次迭代中都會更改,并獲取“mylist”的最后一個元素的值。這些是向量化的操作,R因此在這里執行嵌套回圈會導致錯誤的結果。另外,效率不高 ( o(n^2))
如果我們需要在 ( o(n)) 中回圈,創建一個索引物件 ( ind),然后遍歷 'ind' 的序列,子集 'ind' 元素以獲取對應的names并將其分配給list序列中的元素
ind <- 56:80
for(i in seq_along(ind)) {
names(CNS7)[ind[i]] <- mylist[[i]]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/505237.html
上一篇:Flutter/Dart嵌套For&While回圈行為有線
下一篇:將回圈與awk相結合
