我有一个有两行的数据框:
| code | name | v1 | v2 | v3 | v4 |
|------|-------|----|----|----|----|
| 345 | Yemen | NA | 2 | 3 | NA |
| 346 | Yemen | 4 | NA | NA | 5 |
有没有一种简单的方法来合并这两行?
如果我将“345”重命名为“346”,事情会变得更容易吗?
您可以使用aggregate http://stat.ethz.ch/R-manual/R-devel/library/stats/html/aggregate.html。假设您要合并列中具有相同值的行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
这就像 SQLSELECT name, min(v1) GROUP BY name
. The min
函数是任意的,你也可以使用max
or mean
,它们都从 NA 和非 NA 值返回非 NA 值,如果na.rm = TRUE
。
(类似 SQLcoalesce()
如果 R 中存在该函数,听起来会更好。)
但是,您应该首先检查给定的所有非 NA 值是否name
是相同的。例如,运行aggregate
两者都与min
and max
并比较,或运行它range
.
最后,如果你有更多的变量而不仅仅是 v1-4,你可以使用DF[,!(names(DF) %in% c("code","name"))]
定义列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)