我有一个data.frame
大character
列和几个包含NA
的数字列。
以下是一些示例行:
df <- data.frame(id=rep("A",3),v1=c(NA,1,NA),v2=c(2,5,2),v3=c(NA,NA,NA),V4=c(0,0,0),stringsAsFactors=F)
自df$id
重复后,我想aggregate
df
df$id
,sum
将require(data.table)
setDT(df)[,lapply(.SD, function(x) sum(x,na.rm=T)),by=.(id)]
应用于所有其他列。
我这样做了:
id v1 v2 v3 V4
1: A 1 9 0 0
我得到了这个:
v3
因此,NA
列df
列0
NA
,因此获得NA
的值,这对我来说是个问题,因为在这种情况下我希望保留NA
值,但在所有其他情况下(汇总是数字和NA
的混合,显然我想要删除df$v4
,否则总和将为0
)。如示例所示(0
),我的列都是NA
,因此我无法用data.frame
&替换所有 id v1 v2 v3 V4
1: A 1 9 NA 0
& #39;来自汇总的data.table
。
换句话说,这是我期望的结果:
.SD
知道如何获得<?php
$array1=Array
(
0 => Array
(
"id" => 377556,
"name" => "8 Ball Pool iOS App - US *"
)
);
$array2=Array
(
0 => Array
(
"id" => 377555,
"name" => "test data"
)
);
$newArray=array($array1,$array2);
$result=array();
foreach($newArray as $value)
{
$result=array_merge($result,$value);
}
print_r($result);
Array
(
[0] => Array
(
[id] => 377556
[name] => 8 Ball Pool iOS App - US *
)
[1] => Array
(
[id] => 377555
[name] => test data
)
)
聚合来实现这一目标吗?
答案 0 :(得分:5)
df[,lapply(.SD, function(x) ifelse(all(is.na(x)),NA,sum(x,na.rm=T))),by=.(id)]
id v1 v2 v3 V4
1: A 1 9 NA 0
答案 1 :(得分:1)
我们也可以在没有if/else
声明的情况下执行此操作
setDT(df)[, lapply(.SD, function(x) sum(x, na.rm = TRUE)*NA^all(is.na(x))), id]
# id v1 v2 v3 V4
#1: A 1 9 NA 0