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