我正在使用R编程语言。
我有以下数据集:
library(dplyr)
df = structure(list(ethnicity = c("c", "c", "c", "b", "c", "b", "b",
"b", "c", "a", "b", "b", "a", "b", "c", "a", "c", "c", "a", "a",
"a", "a", "c", "b", "c", "b", "a", "b", "c", "b", "a", "c", "c",
"a", "c", "b", "a", "c", "a", "a", "b", "c", "c", "a", "c", "a",
"c", "b", "a", "b", "a", "a", "c", "a", "b", "a", "a", "c", "a",
"b", "a", "c", "a", "c", "b", "c", "b", "b", "c", "b", "b", "c",
"c", "a", "b", "b", "a", "b", "a", "a", "b", "c", "c", "a", "b",
"a", "b", "a", "c", "c", "b", "c", "a", "b", "b", "c", "b", "a",
"c", "c"), number_of_degrees = c(3L, 2L, 2L, 3L, 1L, 1L, 3L,
2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 3L, 2L, 3L, 2L,
3L, 1L, 3L, 3L, 3L, 1L, 3L, 3L, 2L, 2L, 2L, 3L, 3L, 3L, 2L, 1L,
2L, 1L, 3L, 3L, 2L, 1L, 3L, 1L, 3L, 2L, 2L, 1L, 3L, 2L, 1L, 3L,
3L, 3L, 1L, 2L, 2L, 1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L, 3L, 3L, 1L,
3L, 2L, 1L, 1L, 2L, 3L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 3L,
1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 3L, 3L, 2L, 1L, 2L)), class = "data.frame", row.names = c(NA,
-100L))
df %>%
# Group the data by number_of_degrees
group_by(number_of_degrees) %>%
# Calculate the percentage of each ethnicity within each group
summarize(
percent_a = mean(ethnicity == "a") * 100,
percent_b = mean(ethnicity == "b") * 100,
percent_c = mean(ethnicity == "c") * 100
)
这将产生以下输出:
# A tibble: 3 x 4
number_of_degrees percent_a percent_b percent_c
<int> <dbl> <dbl> <dbl>
1 1 33.3 36.7 30
2 2 31.6 21.1 47.4
3 3 34.4 40.6 25
**我的问题:**是否有一种更“紧凑”的方式来编写此代码,以便我不必手动编写“percent_a”,“percent_B”等?这样,它会更快,并自动为所有种族的价值观。
5条答案
按热度按时间llycmphe1#
下面是一行代码,用于使用这些数据生成一个表。未使用任何包。
给出:
您可以考虑添加页边距,以清楚地表明这些行相加为100。
给出:
yvgpqqbh2#
也许您可以尝试这个基本的R选项(列名可能与所需的输出有点不同)
或
它给出了
或者,使用
dplyr
的不太紧凑的选项(抱歉,我对tidyverse
的了解有限)它给出了
odopli943#
这是一个选项:
bvn4nwqk4#
有个办法它不是更紧凑,但没有硬编码
ethnicity
值。创建于2023-06-02使用reprex v2.0.2
gojuced75#
使用
mosaic::percs
表示百分比。可以使用counts(..., format = 'percent')