Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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 合并数据帧中不相交且包含NAs的行_R_Dataframe_Dplyr_Data.table_Coalesce - Fatal编程技术网

R 合并数据帧中不相交且包含NAs的行

R 合并数据帧中不相交且包含NAs的行,r,dataframe,dplyr,data.table,coalesce,R,Dataframe,Dplyr,Data.table,Coalesce,我有一个数据帧,它有两行: | code | name | v1 | v2 | v3 | v4 | |------|-------|----|----|----|----| | 345 | Yemen | NA | 2 | 3 | NA | | 346 | Yemen | 4 | NA | NA | 5 | 有没有合并这两行的简单方法? 如果我在346中重命名345,会不会让事情变得更简单?您可以使用。假设要合并列名称中具有相同值的行: 这类似于SQL选择名称,即minv1 GR

我有一个数据帧,它有两行:

| code | name  | v1 | v2 | v3 | v4 |
|------|-------|----|----|----|----|
| 345  | Yemen | NA | 2  | 3  | NA |
| 346  | Yemen | 4  | NA | NA | 5  |
有没有合并这两行的简单方法? 如果我在346中重命名345,会不会让事情变得更简单?

您可以使用。假设要合并列名称中具有相同值的行:

这类似于SQL选择名称,即minv1 GROUP BY name。min函数是任意的,您也可以使用max或mean,它们都从NA返回非NA值,如果NA.rm=TRUE,则返回非NA值。 如果R中存在类似SQL的合并函数,则听起来会更好

但是,您应该首先检查给定名称的所有非NA值是否相同。例如,使用“最小值”和“最大值”运行聚合并进行比较,或者使用“范围”运行聚合

最后,如果您有比v1-4更多的变量,您可以使用DF[,!namedf%in%ccode,name]来定义列。

添加dplyr&data.table解决方案以确保完整性

使用dplyr::coalesce

图书馆弹琴 总额% 组\按名称%>% 总结全文 >一个tibble:1 x 6 >名称代码v1 v2 v3 v4 > >1也门691 4 2 3 5 裁判:https://stackoverflow.com/a/45515491 通过将列表拼接成点来提供列表: 通过_列合并_% 组\按名称%>% 按列汇总所有合并 >一个tibble:1 x 6 >名称代码v1 v2 v3 v4 > >1也门345 4 2 3 5 使用data.table

裁判:https://stackoverflow.com/q/28036294/ 图书馆数据表 setDTdf[,lappy.SD,na.omit,by=name] >名称代码v1 v2 v3 v4 >1:也门345 4 2 3 5 >2:也门346435 setDTdf[,code:=NULL][,lappy.SD,na.omit,by=name] >名称v1 v2 v3 v4 >1:也门4 2 3 5 setDTdf[,code:=NULL][,lapply.SD,sum\u NA,by=name] >名称v1 v2 v3 v4 >1:也门4 2 3 5
您需要一些规则来组合非NA列。例如,您将始终采用第一次或最后一次,数值列的平均值等。此处需要合并功能。在这个线程上找到了一个很好的讨论:[link]运行您的示例会在DF$name:$operator对atomic无效时出错vectors@MattO“布莱恩,你的DF看起来怎么样?它是数据帧吗?if是否有多个列?您是否有复制错误的代码?
aggregate(x=DF[c("v1","v2","v3","v4")], by=list(name=DF$name), min, na.rm = TRUE)
   name v1 v2 v3 v4
1 Yemen  4  2  3  5