首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中宽到长的形式

R中宽到长的形式
EN

Stack Overflow用户
提问于 2022-11-12 02:44:15
回答 2查看 46关注 0票数 1

有一个数据集,用于确定机间可靠性。试图重组我的数据从宽到长的形式。这是我的数据。

代码语言:javascript
复制
Subject   Rater   Item_1   Item_2
AB         1        6        4
AB         2        5        5
CD         1        4        5
CD         2        6        5
EF         1        4        4
EF         2        7        5

我想重组它,使它看起来像这样:

代码语言:javascript
复制
Subject   Item   Rater_1   Rater_2
AB         1         6         5
AB         2         4         5
CD         1         4         6
CD         2         5         5
EF         1         4         7
EF         2         4         5

我尝试过pivot_longer,但无法将“评级者”分成两列。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2022-11-12 03:00:45

以长格式获取数据,并使用不同的键再次以宽格式获取数据。

代码语言:javascript
复制
library(dplyr)
library(tidyr)

#Thanks to @Dan Adams for the `NA` trick. 
df %>%
  pivot_longer(cols = starts_with('Item'), 
               names_to = c(NA, 'Item'), 
               names_sep = "_") %>%
  pivot_wider(names_from = Rater, values_from = value, names_prefix = "Rater_")

# Subject Item  Rater_1 Rater_2
#  <chr>   <chr>   <int>   <int>
#1 AB      1           6       5
#2 AB      2           4       5
#3 CD      1           4       6
#4 CD      2           5       5
#5 EF      1           4       7
#6 EF      2           4       5

数据

代码语言:javascript
复制
df <- structure(list(Subject = c("AB", "AB", "CD", "CD", "EF", "EF"
), Rater = c(1L, 2L, 1L, 2L, 1L, 2L), Item_1 = c(6L, 5L, 4L, 
6L, 4L, 7L), Item_2 = c(4L, 5L, 5L, 5L, 4L, 5L)), 
class = "data.frame", row.names = c(NA, -6L))
票数 3
EN

Stack Overflow用户

发布于 2022-11-12 15:58:48

这是一个基本的R解。在这种情况下,您实际上只是按组转换数据。

代码语言:javascript
复制
Map(\(s) {
  x <- subset(df, df$Subject == s)
  x[,c("Item_1", "Item_2")] <-  t(x[,c("Item_1", "Item_2")])
  colnames(x) <- c("Subject", "Item", "Rater_1", "Rater_2")
  x
}, unique(df$Subject)) |>
  do.call(what = rbind)
#> # A tibble: 6 x 4
#>   Subject  Item Rater_1 Rater_2
#> * <chr>   <dbl>   <dbl>   <dbl>
#> 1 AB          1       6       5
#> 2 AB          2       4       5
#> 3 CD          1       4       6
#> 4 CD          2       5       5
#> 5 EF          1       4       7
#> 6 EF          2       4       5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74410034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档