例如,我有一個內部沒有任何內容的資料框,但我需要它來運行完整代碼,因為它通常希望有資料。我試過這個,但沒有用
ifelse(dim(df_empty)[1]==0,rbind(Shots1B_empty,NA))
uj5u.com熱心網友回復:
也許是這樣的:
df_empty <- data.frame(x=integer(0), y = numeric(0), a = character(0))
if(nrow(df_empty) == 0){
df_empty <- rbind(df_empty, data.frame(x=NA, y=NA, a=NA))
}
df_empty
# x y a
#1 NA NA NA
uj5u.com熱心網友回復:
我們可能需要if/else而不是ifelse-ifelse要求所有引數的長度相同,這顯然不是我們的情況rbind
Shots1B_empty <- if(nrow(df_empty) == 0) rbind(Shots1B_empty, NA)
uj5u.com熱心網友回復:
簡單的問題,OP,但實際上很有趣。你的代碼的所有元素都應該可以作業,但問題是當你按原樣運行時,它會回傳一個串列,而不是一個資料框。讓我用一個例子告訴你:
growing_df <- data.frame(
A=rep(1, 3),
B=1:3,
c=LETTERS[4:6])
df_empty <- data.frame()
如果我們按照您所寫的進行評估,您將得到:
df <- ifelse(dim(df_empty)[1]==0, rbind(growing_df, NA))
與df導致串列:
> class(df)
[1] "list"
> df
[[1]]
[1] 1 1 1 NA
代碼“有效”,但結果類df是錯誤的。這很奇怪,因為這有效:
> rbind(growing_df, NA)
A B c
1 1 1 D
2 1 2 E
3 1 3 F
4 NA NA <NA>
答案是使用ifandelse而不是ifelse(),正如@akrun 在他們的回答中指出的那樣。的原因,如果你深入到發現檔案的ifelse():
ifelse 回傳一個與 test 具有相同形狀的值,其中填充了從 yes 或 no 中選擇的元素,具體取決于 test 的元素是 TRUE 還是 FALSE。
由于dim(df_empty)[1]和/或nrow(df_empty)都是向量,因此結果將保存為串列。這就是為什么if {}有效,但不是ifelse()在這里。 rbind()結果通常是一個資料幀,但是df分配時存盤到的結果的類ifelse()是根據測驗元素決定的,而不是結果元素。將其與if{}陳述句進行比較,陳述句的結果元素取決于輸入到 中的任何運算式{}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340000.html
上一篇:知道我在代碼中使用了2個不同的擴展名,如何在我的所有資料上應用R腳本
下一篇:分組矩陣相關
