Использование R (и dplyr) для создания нескольких сводных таблиц с факторной информацией - PullRequest
0 голосов
/ 15 марта 2020

Я новичок в R и пытаюсь взять таблицы, которые выглядят так

ID Type
X  A
X  A
X  B
Y  C
Y  D
Y  E
Z  F
Z  F

И создать сводные таблицы для каждого значения идентификатора, чтобы они выглядели так

X  Y  Z  
A  C  F
B  D
   E 

Как бы я go сделал это с помощью dplyr или чего-то подобного? Я пытался сделать что-то вроде кросс-таблицы, но так как нет числовых значений c, которые я не смог бы.

Ответы [ 3 ]

0 голосов
/ 15 марта 2020

Вот один подход, использующий tidyverse:

library(tidyverse)

df %>%
  group_by(ID) %>%
  distinct(ID, Type) %>%
  mutate(rn = row_number()) %>%
  pivot_wider(id_cols = rn, names_from = ID, values_from = Type) %>%
  replace(., is.na(.), " ") %>%
  as.data.frame() %>%
  select(-rn)

Выход

  X Y Z
1 A C F
2 B D  
3   E  

Данные

df <- data.frame(
  ID = c('X', 'X', 'X', 'Y', 'Y', 'Y', 'Z', 'Z'),
  Type = c('A', 'A', 'B', 'C', 'D', 'E', 'F', 'F'),
  stringsAsFactors = FALSE
)
0 голосов
/ 15 марта 2020

Мы можем получить значения unique в Type для каждого ID и связать данные вместе, используя rowr::cbind.fill, заполнив отсутствующие значения пустой строкой.

setNames(do.call(rowr::cbind.fill, c(by(df$Type, df$ID, unique), fill = "")), 
         unique(df$ID))

#  X Y Z
#1 A C F
#2 B D  
#3   E  

данные

df <- structure(list(ID = c("X", "X", "X", "Y", "Y", "Y", "Z", "Z"), 
Type = c("A", "A", "B", "C", "D", "E", "F", "F")), 
class = "data.frame", row.names = c(NA, -8L))
0 голосов
/ 15 марта 2020

Вы хотите загрузить пакет "Psych" и использовать функцию "descriptionBy ()".

id = c("X", "X", "X","Y","Y","Y","Z","Z")
type = c("A","A","B","C","D","E","F","F")
df = as.data.frame(id,type)

library("psych")

describeBy(df, group = id)

надеюсь, это поможет. https://www.rdocumentation.org/packages/psych/versions/1.9.12.31/topics/describeBy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...