考慮一下:到data.frame添加數據0行
df <- data.frame(a=1:2, b=3:4)
我可以添加一個新的列和值分配給它這樣的:
df$c <- 5
但是,如果我這個子集,所以其空data.frame並嘗試任何分配給它,它會返回一個錯誤:
df2 <- subset(df, a==3)
df2$d <- 10
Error in $<-.data.frame(tmp, "d", value = 10) : replacement has 1 row, data has 0
這將停止循環,所以我的問題是,如果有其他方法可以將值分配給數據框中的某列,而該數據框在數據框爲空時不會返回錯誤?
您可以創建一個函數來執行任務之前檢查數據集的nrow即'f1 < - 函數(dat,cname){dat2 < - dat [dat [[cname]] == 3,];如果(nrow(df2)> 0){dat2 $ d < - 10; dat2} else dat2}' – akrun
這有效,但它有點寫(我有一個長腳本)。沒有「聰明」的方式爲列賦值? –
如果你使用包'dplyr',你可以添加一個包含'df2%>%mutate(d = 10)'的列,如果沒有行,它不會崩潰......它有幫助嗎?因此,它可能是一個類似於'df2 <- df %>%filter(a == 3)%>%mutate(d = 10)'的單線程代碼' – ztl