## halfway there
colSums(!is.na(x))
# KAS1_1 KAS1_2 KAS1_3 KAS1_4 KAS1_5
# 7 5 3 4 4
## make it a data frame
data.frame(count = colSums(!is.na(x)))
# count
# KAS1_1 7
# KAS1_2 5
# KAS1_3 3
# KAS1_4 4
# KAS1_5 4
## or use `stack` like markus's nice answer:
stack(colSums(!is.na(x)))
# values ind
# 1 7 KAS1_1
# 2 5 KAS1_2
# 3 3 KAS1_3
# 4 4 KAS1_4
# 5 4 KAS1_5
将行名转换为它们自己的列将是另一个步骤,但我将把这留给您。
tidyverse
解决方案是先转换为长格式,然后进行分组求和:
library(dplyr)
library(tidyr)
x %>% gather %>%
group_by(key) %>%
summarize(value = sum(!is.na(value)))
# # A tibble: 5 x 2
# key value
# <chr> <int>
# 1 KAS1_1 7
# 2 KAS1_2 5
# 3 KAS1_3 3
# 4 KAS1_4 4
# 5 KAS1_5 4
data.table
解决方案类似:
library(data.table)
xdt = as.data.table(x)
melt(xdt, measure.vars = names(xdt))[, .(count = sum(!is.na(value))), by = .(variable)]
# variable count
# 1: KAS1_1 7
# 2: KAS1_2 5
# 3: KAS1_3 3
# 4: KAS1_4 4
# 5: KAS1_5 4