Создать матрицу с другой матрицей в R - PullRequest
1 голос
/ 23 марта 2020

Итак, у меня есть набор данных (использование), подобный следующему, в R:

Item    Bike    Usage
item1   bike1   1
item2   bike1   2
item1   bike2   1
item3   bike2   2

И я хотел преобразовать матрицу с использованием. Я создал матрицу, в которой мой заголовок - это велосипеды (bike 1, bike2), а имена строк - (item 1, item 2, item 3), и я добавил NA, и теперь я хочу заполнить его использованием, например:

bike1  bike2
item 1 1      1
item 2 1      0
item 3 0      1

Я создал следующее l oop:

for (i in 1:nrow(usage)) {
  item<-usage[i,1]
  bike<-usage[i,2]
  matriz[item,bike]<-usage[i,3]

matriz[is.na(matriz)]<-0

}

Но я получаю эту ошибку:

Error in `[<-`(`*tmp*`, item, bike, value = list(Usage = 6)) : 
  invalid subscript type 'list'

Ответы [ 3 ]

1 голос
/ 23 марта 2020
library(tidyr)
pivot_wider(dat, "Item", names_from="Bike",
            values_from="Usage", values_fill=list(Usage=0))
# # A tibble: 3 x 3
#   Item  bike1 bike2
#   <chr> <int> <int>
# 1 item1     1     1
# 2 item2     2     0
# 3 item3     0     2

Данные:

dat <- structure(list(Item = c("item1", "item2", "item1", "item3"), 
    Bike = c("bike1", "bike1", "bike2", "bike2"), Usage = c(1L, 
    2L, 1L, 2L)), class = "data.frame", row.names = c(NA, -4L
))
0 голосов
/ 23 марта 2020

Один вариант: acast из reshape2

library(reshape2)
acast(df,  Item ~ Bike, fill = 0)
#       bike1 bike2
#item1     1     1
#item2     2     0
#item3     0     2

data

df <- structure(list(Item = c("item1", "item2", "item1", "item3"), 
    Bike = c("bike1", "bike1", "bike2", "bike2"), Usage = c(1L, 
    2L, 1L, 2L)), class = "data.frame", row.names = c(NA, -4L
))
0 голосов
/ 23 марта 2020

Может быть, вы можете попробовать xtabs, если вам нужен стол

res_tb <- xtabs(Usage~.,df)

такой, что

> res_tb
       Bike
Item    bike1 bike2
  item1     1     1
  item2     2     0
  item3     0     2

ДАННЫЕ

df <- structure(list(Item = c("item1", "item2", "item1", "item3"), 
    Bike = c("bike1", "bike1", "bike2", "bike2"), Usage = c(1L, 
    2L, 1L, 2L)), class = "data.frame", row.names = c(NA, -4L
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...