Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中data.table中的Group by,它只保留列中的非NA值_R_Group By_Data.table - Fatal编程技术网

R中data.table中的Group by,它只保留列中的非NA值

R中data.table中的Group by,它只保留列中的非NA值,r,group-by,data.table,R,Group By,Data.table,我是R的新手 我想按data.table分组,只保留列中的非NA值 我的桌子看起来像: c1 c2 c3 c4 1 A NA NA 1 NA B NA 1 NA NA C 2 A1 NA NA 2 NA B1 NA 2 NA NA C1 我想要一个结果: c1 c2 c3 c4 1 A B C 2 A1 B1 C1 希望任何人都能帮忙 试试看 lib

我是R的新手

我想按data.table分组,只保留列中的非NA值

我的桌子看起来像:

c1   c2   c3   c4
1    A    NA   NA
1    NA   B    NA
1    NA   NA   C
2    A1   NA   NA
2    NA   B1   NA
2    NA   NA   C1
我想要一个结果:

c1   c2   c3   c4
1    A    B    C
2    A1   B1   C1
希望任何人都能帮忙

试试看

library(data.table)
setDT(df1)[, lapply(.SD, na.omit) , by = c1]
#    c1 c2 c3 c4
#1:  1  A  B  C
#2:  2 A1 B1 C1


我检查了@akrun answer中的两种方法,发现方法2更好

更新:我还添加了使用
complete.cases
作为@akrun建议的函数


f1您是否也可以尝试
complete.cases
。通常情况下,它会更快。我会稍后尝试完成。案例
,并更新我的帖子。谢谢你的帮助!它已经尝试了
完成.cases
,但不如
那么好。na
:)
setDT(df)[, lapply(.SD, function(x) x[!is.na(x)]) , by = c1]
 f1 <- function (d) d[, lapply(.SD, na.omit) , by = c1]
 f2 <- function (d) d[, lapply(.SD, function(x) x[!is.na(x)]) , by = c1]
 f3 <- function (d) d[, lapply(.SD, function(x) x[complete.cases(x)]), by = c1]

 microbenchmark(f1(copy(dt2)), f2(copy(dt2)), f3(copy(dt2)))


#Unit: milliseconds
#          expr       min        lq      mean    median        uq       max neval
# f1(copy(dt2)) 124.22661 132.84712 138.00615 135.48418 140.18581 222.20735   100
# f2(copy(dt2))  14.47915  16.37986  18.15728  17.35153  18.38754  28.72007   100
# f3(copy(dt2))  22.10803  24.43208  27.63959  26.18713  31.58418  39.31601   100