2016-08-12 99 views
-1

這涉及到的問題Group by in data.table in R which only keep non NA values from columns分組通過行向data.table型變化

例子: 我

df <- data.frame(x = c('a', 'a', 'b', 'b'), y = c(1,NA,2,NA), z = c(NA, 3, NA, 4)) 

df 

    x y z 
1 a 1 NA 
2 a NA 3 
3 b 2 NA 
4 b NA 4  

,我想

df2 <- data.frame(x = c('a', 'b'), y = c(1,2), z = c(3,4))  

df2 

    x y z 
1 a 1 3 
2 b 2 4 

我有相同問題和上面的問題一樣,我嘗試了可接受的答案並且工作,但它改變了我的數據框中內容的類型。我需要它們保留爲下游分析的數值,並且之後使用as.numeric不起作用。我也嘗試使用dplyr group_by解決最初的問題,但它也沒有工作,所以我想我誤解了該函數(仍然是R中的初學者和一般的數據分析!)。

對不起,這個非常基本的問題,但我一直試圖解決這個問題一段時間!歡迎任何建議。

謝謝!

回答

0

我們可以data.table

library(data.table) 
dt1 <- setDT(df)[, lapply(.SD, function(x) x[!is.na(x)]), x] 
str(dt1) 
#Classes ‘data.table’ and 'data.frame': 2 obs. of 3 variables: 
#$ x: Factor w/ 2 levels "a","b": 1 2 
#$ y: num 1 2 
#$ z: num 3 4 

str(df) 
#Classes ‘data.table’ and 'data.frame': 4 obs. of 3 variables: 
#$ x: Factor w/ 2 levels "a","b": 1 1 2 2 
#$ y: num 1 NA 2 NA 
#$ z: num NA 3 NA 4 

如果我們需要,我們可以將 'DT1' 與setDF

setDF(dt1) 
更改爲 'data.frame' 這樣做