如何解决使用R中的平均分数重新排列行和列+
score item1 item2 item3
50 always never some
60 some always never
70 never some always
80 always never some
90 some never always
我正在尝试创建一个表,以显示每个级别每个项目的得分的平均值(即,项目1的平均得分,总是?项目1的平均得分,有些?)
关于如何修改数据集的任何建议,使其看起来像这样:
item1 item2 item3
always mean# mean# mean#
some mean# mean# mean#
never mean# mean# mean#
谢谢!
解决方法
这是pivot_
中tidyr
函数的出色用法。
library(tidyr)
library(dplyr) # for the pipe and across
# here is the data
df <- tructure(list(score = c(50,60,70,80,90),item1 = c("always","some","never","always","some"),item2 = c("never","never"),item3 = c("some","always")),class = c("spec_tbl_df","tbl_df","tbl","data.frame"),row.names = c(NA,-5L),spec = structure(list(
cols = list(score = structure(list(),class = c("collector_double","collector")),item1 = structure(list(),class = c("collector_character",item2 = structure(list(),item3 = structure(list(),"collector"))),default = structure(list(),class = c("collector_guess",skip = 1),class = "col_spec"))
df %>%
pivot_longer(starts_with("item"),values_to = "response") %>%
pivot_wider(id_cols = response,names_from = name,values_from = score,values_fn = mean)
# A tibble: 3 x 4
response item1 item2 item3
<chr> <dbl> <dbl> <dbl>
1 always 65 60 80
2 never 70 73.3 60
3 some 75 70 65
,
以下是一些基本的R选项:
- 使用
stack
+tapply
with(
cbind(score = df$score,stack(df[-1])),tapply(score,list(values,ind),mean,na.rm = TRUE)
)
给出
ind
values item1 item2 item3
always 65 60.00000 80
never 70 73.33333 60
some 75 70.00000 65
- 使用
lapply
+tapply
do.call(
cbind,lapply(df[-1],function(k) tapply(df$score,k,na.rm = TRUE))
)
给出
item1 item2 item3
always 65 60.00000 80
never 70 73.33333 60
some 75 70.00000 65
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。