这与问题Group by in data.table in R which only keep non NA values from columns
有关实施例: 我有
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 :(得分: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
如果我们需要,我们可以更改&#39; dt1&#39;到&#39; data.frame&#39;使用setDF
setDF(dt1)