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"))]
用来定义列.
归档时间: |
|
查看次数: |
16132 次 |
最近记录: |