我想合并数据图的两个记录"df";ID为";A";以及";B";其在一行中缺少一些数据(NA(;C";(目标(。我知道matrix可以做这种工作。但在数据帧中,没有可用的行号。
以下是我的数据。
df
ID Y1 Y2 Y3 Y4 Y5 Y6
A 7 4 NA NA NA NA
B NA NA 5 5 4 4
目标:
ID Y1 Y2 Y3 Y4 Y5 Y6
C 7 4 5 5 4 4
我们可以使用
df1 %>%
summarise(ID = 'C', across(where(is.numeric), na.omit))
# ID Y1 Y2 Y3 Y4 Y5 Y6
#1 C 7 4 5 5 4 4
数据
df1 <- structure(list(ID = c("A", "B"), Y1 = c(7L, NA), Y2 = c(4L, NA
), Y3 = c(NA, 5L), Y4 = c(NA, 5L), Y5 = c(NA, 4L), Y6 = c(NA,
4L)), class = "data.frame", row.names = c(NA, -2L))
我们可以使用janitor
包中的adorn_totals
:
library(dplyr)
library(janitor)
df1 %>%
adorn_totals("row") %>%
slice(3)
输出:
ID Y1 Y2 Y3 Y4 Y5 Y6
Total 7 4 5 5 4 4
这行吗:
as.data.frame(cbind(ID = 'C',t(apply(df[-1], 2, sum, na.rm = TRUE))))
ID Y1 Y2 Y3 Y4 Y5 Y6
1 C 7 4 5 5 4 4
一些基本R选项
colSums
> cbind(ID = "C", data.frame(t(colSums(df[-1], na.rm = TRUE))))
ID Y1 Y2 Y3 Y4 Y5 Y6
1 C 7 4 5 5 4 4
na.omit
+list2DF
> list2DF(c(ID = "C", Map(na.omit, df[-1])))
ID Y1 Y2 Y3 Y4 Y5 Y6
1 C 7 4 5 5 4 4
如果在任何情况下,您都有一对想要合并到一起的行,您可以遵循以下简单策略
df <- structure(list(ID = c("A", "B", "C", "E"), Y1 = c(7L, NA, NA,
7L), Y2 = c(4L, NA, 5L, NA), Y3 = c(NA, 5L, NA, 5L), Y4 = c(NA,
5L, NA, 5L), Y5 = c(NA, 4L, 14L, NA), Y6 = c(NA, 4L, 5L, NA)), row.names = c(NA,
-4L), class = "data.frame")
df
#> ID Y1 Y2 Y3 Y4 Y5 Y6
#> 1 A 7 4 NA NA NA NA
#> 2 B NA NA 5 5 4 4
#> 3 C NA 5 NA NA 14 5
#> 4 E 7 NA 5 5 NA NA
library(dplyr)
df %>% group_by(ID = (row_number()+1) %/% 2) %>%
summarise(across(everything(), sum, na.rm =T))
#> # A tibble: 2 x 7
#> ID Y1 Y2 Y3 Y4 Y5 Y6
#> <dbl> <int> <int> <int> <int> <int> <int>
#> 1 1 7 4 5 5 4 4
#> 2 2 7 5 5 5 14 5
创建于2021-05-30由reprex包(v2.0.0(