比方說,我想打一個數據幀與數字列和字符列:如何將行添加到循環內的數據框而不強制所有列爲相同類型?
df<-data.frame()
for(i in 1:26) {
df<-rbind(df, cbind(x=i, y=toString(i)))
}
str(df)
'data.frame': 26 obs. of 2 variables:
$ x: Factor w/ 26 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
..- attr(*, "names")= chr "x" "x" "x" "x" ...
$ y: Factor w/ 26 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
..- attr(*, "names")= chr "y" "y" "y" "y" ...
哎呀,我不想因素。
df2<-data.frame()
for(i in 1:26) {
df2<-rbind(df2, cbind(x=i, y=toString(i)), stringsAsFactors=FALSE)
}
str(df2)
'data.frame': 26 obs. of 2 variables:
$ x: chr "1" "2" "3" "4" ...
$ y: chr "1" "2" "3" "4" ...
現在一切都是一個字符。我可以計算出,以避免這種情況的唯一方法是通過在年底構建單獨的載體中,然後形成數據幀:
x<-NULL
y<-NULL
for(i in 1:26) {
x<-c(x, i)
y<-c(y, toString(i))
}
df3<-data.frame(x, y, stringsAsFactors=FALSE)
str(df3)
'data.frame': 26 obs. of 2 variables:
$ x: int 1 2 3 4 5 6 7 8 9 10 ...
$ y: chr "1" "2" "3" "4" ...
但正如你所看到的,這需要額外的代碼。如果您有一個包含20列的數據框,則需要20個循環前的初始化語句和循環內的20個語句才能添加到向量中。
是否有一個更簡潔的方法來完成這個?
我認爲最好將它作爲'list'來避免類型轉換 – akrun
您是否必須在每一步都指定df?這似乎非常低效。爲什麼不只是輕鬆地完成所有的步驟,然後'do.call(rbind,list)'? – Shape
**從不**將行添加到循環中的data.frame。當你沒有描述實際問題時,這看起來像是一個典型的XY問題,而是尋找幫助解決非常糟糕的問題。我建議你不要描述你如何解決它,而是描述你實際想要達到的目標。 –