2016-08-12 70 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' 这样做