с dplyr
, вы можете попробовать что-то вроде
df1 %>%
select(ends_with("_xyz")) %>%
mutate(nnums = rowSums(!is.na(.)))
, предполагая, что ввод
structure(list(X1_abc = c(NA, NA, NA, NA, NA, NA), X1_xyz = c(1,
NA, NA, NA, NA, 1), X2_abc = c(NA, NA, NA, NA, NA, NA), X2_xyz = c(1,
NA, 1, NA, NA, NA), X3_abc = c(NA, NA, NA, NA, NA, NA), X3_xyz = c(NA,
NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-6L))
возвращает
X1_xyz X2_xyz X3_xyz nnums
1 1 1 NA 2
2 NA NA NA 0
3 NA 1 NA 1
4 NA NA NA 0
5 NA NA NA 0
6 1 NA NA 1
я надеюсь, что вы можете изменитьвокруг кода, чтобы сохранить нужные столбцы.
РЕДАКТИРОВАТЬ 1:
, чтобы сохранить все столбцы, попробуйте
df1 %<>%
mutate(nnums = rowSums(!is.na(select(df1, ends_with("_xyz")))))