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

Luk*_*rau 14 r coalesce dataframe dplyr data.table

我有一个有两行的数据框:

| code | name  | v1 | v2 | v3 | v4 |
|------|-------|----|----|----|----|
| 345  | Yemen | NA | 2  | 3  | NA |
| 346  | Yemen | 4  | NA | NA | 5  |
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法来合并这两行?如果我在"346"中重命名"345"会更容易吗?

Dan*_*ing 10

你可以用aggregate.假设您要在列中合并具有相同值的行name:

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
Run Code Online (Sandbox Code Playgroud)

这就像SQL一样SELECT name, min(v1) GROUP BY name.该min函数是任意的,你也可以使用max或者mean,所有这些函数都返回NA的非NA值和非NA值na.rm = TRUE.(coalesce()如果存在于R中,类似SQL的函数听起来会更好.)

但是,您应首先检查给定的所有非NA值name是否相同.例如,aggregate使用min和运行两者max并比较,或运行它range.

最后,如果你有比v1-4更多的变量,你可以DF[,!(names(DF) %in% c("code","name"))]用来定义列.