У меня есть фрейм данных с первым столбцом как features
и другими столбцами со значениями в наборе {0,1,2, -1, -2}.
Вот структура данных.
df <- structure(list(Features = structure(c(1L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), .Label = c("Var1",
"Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16",
"Var17", "Var18", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7",
"Var8", "Var9"), class = "factor"), Column1 = c(0L, 0L, 0L, 0L,
0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, -1L, -1L, -1L, 0L, 0L), Column2 = c(0L,
0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, -2L, -2L, -2L, -2L, -2L,
0L, 0L), Column3 = c(0L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, 2L, 2L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Column4 = c(0L, 0L, 0L, 2L,
2L, 2L, 2L, 0L, 0L, 0L, 0L, 0L, -2L, -2L, -2L, -2L, 0L, 0L),
Column5 = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 0L, 0L, 0L, 0L, 0L), Column6 = c(0L, 0L, 0L, 2L, 2L,
2L, 0L, 0L, -1L, -1L, -1L, -1L, -1L, -1L, 0L, 0L, 0L, 0L),
Column7 = c(-1L, -1L, 2L, 2L, 2L, 2L, 2L, 2L, -1L, -1L, -1L,
-1L, -1L, -1L, -1L, -1L, -1L, -1L), Column8 = c(1L, 1L, 1L,
1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L
)), class = "data.frame", row.names = c(NA, -18L))
Для каждого столбца я хотел рассчитать процент объектов без 0 в столбцах.
Любая помощь приветствуется. Большое спасибо.
3 ответа
Мы можем использовать colSums
и делить на количество строк в кадре данных
colSums(df[-1] != 0)/nrow(df)
#Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8
# 0.444 0.500 0.333 0.444 0.500 0.500 1.000 0.778
Или используя dplyr
library(dplyr)
df %>% summarise_at(-1, ~sum(.!= 0)/n())
Мы можем просто использовать colMeans
в логическом matrix
colMeans(df[-1] != 0)
# Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8
# 0.4444444 0.5000000 0.3333333 0.4444444 0.5000000 0.5000000 1.0000000 0.7777778
Или используя tidyverse
library(tidyverse)
map_dbl(df[-1], ~ mean(.x != 0))
Может быть, что-то вроде следующего будет делать то, что вы хотите.
df[-1] != 0
возвращает логическую матрицу, ее colSums
- количество ненулевых записей в каждом столбце. Разделите на количество строк и умножьте на 100, чтобы получить желаемый процент.
100*colSums(df[-1] != 0)/nrow(df)
# Column1 Column2 Column3 Column4 Column5
# 44.44444 50.00000 33.33333 44.44444 50.00000
# Column6 Column7 Column8
# 50.00000 100.00000 77.77778
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.