2 つの行を持つデータフレームがあります。
| code | name | v1 | v2 | v3 | v4 |
|------|-------|----|----|----|----|
| 345 | Yemen | NA | 2 | 3 | NA |
| 346 | Yemen | 4 | NA | NA | 5 |
これら 2 つの行をマージする簡単な方法はありますか? 「345」を「346」に改名すると、作業が簡単になりますか?
2 つの行を持つデータフレームがあります。
| code | name | v1 | v2 | v3 | v4 |
|------|-------|----|----|----|----|
| 345 | Yemen | NA | 2 | 3 | NA |
| 346 | Yemen | 4 | NA | NA | 5 |
これら 2 つの行をマージする簡単な方法はありますか? 「345」を「346」に改名すると、作業が簡単になりますか?
使用できますaggregate
。column に同一の値を持つ行をマージしたいと仮定します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
これは SQL のようなものSELECT name, min(v1) GROUP BY name
です。min
関数は任意です。 または を使用することもできます。max
これらmean
はすべて、 NA から非 NA 値を返し、 の場合は非 NA 値を返しますna.rm = TRUE
。(SQL に似たcoalesce()
関数は、R に存在する方が適切に聞こえます。)
ただし、指定されたすべての非 NA 値name
が同一であるかどうかを最初に確認する必要があります。たとえば、andと compare を使用してaggregate
両方を実行するか、 を使用して実行します。min
max
range
最後に、v1-4 以外にも多くの変数がある場合はDF[,!(names(DF) %in% c("code","name"))]
、列を定義するために使用できます。