我試圖將行追加到R df。下面是一個例子DF FOO:R:基於多列中的值添加零行
A B C D
1 1 1 200
1 1 2 50
1 1 3 15
1 2 1 150
1 2 4 50
1 3 1 300
2 1 2 40
2 1 4 90
2 3 2 80
對於每一個A,有B的3個可能的值,以及對於每個B,有C的4個可能的值。然而,最初的DF只包含非零值D.我想操作df,以便B和C都包含零。因此,df對於任何B/C值爲0的D都會顯示0。我已經看到了解決這個問題的問題一列,但無法找到解決它與多列的問題。最終的DF應該是這樣的:
A B C D
1 1 1 200
1 1 2 50
1 1 3 15
1 1 4 0
1 2 1 150
1 2 2 0
1 2 3 0
1 2 4 50
1 3 1 300
1 3 2 0
1 3 3 0
1 3 4 0
2 1 1 0
2 1 2 40
2 1 3 0
2 1 4 90
2 2 1 0
2 2 2 0
2 2 3 0
2 2 4 0
2 3 1 0
2 3 2 80
2 3 3 0
2 3 4 0
我第一次嘗試創建一個虛擬的數據幀,然後與初始DF合併的事,但不工作的權利。這裏是當前的代碼,我知道是錯誤的,因爲這段代碼只生成基於A的行。我想我想製作基於A和B的虛擬框架,但我不知道如何 - if/else函數可以在這裏工作?:
# create dummy df
dummy <- as.data.frame(
cbind(
sort(rep(unique(foo$A), 12)),
rep(1:3,length(unique(foo$A)))))
colnames(dummy) <- c("A","B")
foo$A <- as.numeric(foo$A)
foo$B <- as.numeric(foo$C)
# merge with foo
mergedummy <- merge(dummy,foo,all.x=T)
任何有識之士,非常感謝 - 謝謝!
+1但你是否需要第一行中的「do.call」? – 2014-10-17 02:18:00
@KarolisKoncevičius - 不,不,我不知道。發現得好。 – thelatemail 2014-10-17 03:29:14
感謝您的支持!您的第一個單線程工作,然後我添加了一個額外的'df [is.na(df)< - 0'行以用0替換NA。非常感謝。 – ucsbcoding 2014-10-17 12:52:45