Как посчитать разные числа в каждой строке и создать новый фрейм данных в R? - PullRequest
1 голос
/ 25 апреля 2020
mydata
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    3    3    2    3    3    2    3    3    2     3
[2,]    3    3    2    3    3    2    3    3    2     3
[3,]    1    3    2    3    3    2    3    3    2     3
[4,]    1    3    2    3    3    2    3    3    2     3
[5,]    1    3    2    3    3    2    3    3    2     3

Я хотел бы создать новый фрейм данных с тремя столбцами путем подсчета общего числа различных чисел в каждой строке. Ожидаемый результат должен быть

>newdata    
     [,1] [,2] [,3]
[1,]    0    3    7
[2,]    0    3    7
[3,]    1    3    6
[4,]    1    3    6
[5,]    1    3    6

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Мы можем использовать rep с table

table(rep(seq_len(nrow(mydata)), ncol(mydata)), c(mydata))

data

mydata <- structure(c(3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3), .Dim = c(5L, 10L))
2 голосов
/ 25 апреля 2020

@ Бен дает отличный ответ, и тогда хитрость заключается в том, чтобы обернуть его таблицу as.data.frame.matrix(), чтобы получить желаемый результат:

# example data
mat <- matrix(c(3,3,1,1,1,rep(3,5),rep(2,5),rep(3,10),
              rep(2,5),rep(3,10),rep(2,5),rep(3,5)), 
              nrow=5, ncol=10)

# count values by row
df <- as.data.frame.matrix(table(row(mat),mat))

# confirm result
str(df)
'data.frame':   5 obs. of  3 variables:
 $ 1: int  0 0 1 1 1
 $ 2: int  3 3 3 3 3
 $ 3: int  7 7 6 6 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...