#r #dplyr
#r #dplyr
Вопрос:
Я хочу получить следующую таблицу, используя повторяющиеся данные:
X1 X2 M1 Q O
1 1 m1 q1 20
2 1 m2 q2 20
3 1 m3 q3 16
4 2 m1 q1 15
5 2 m2 q2 12
6 2 m3 q3 19
7 3 m1 q1 17
8 3 m2 q2 19
9 3 m3 q3 17
10 4 m1 q1 19
11 4 m2 q2 15
12 4 m3 q3 19
Столбец O представляет собой случайные данные между 12,20.
Я использовал следующие коды, но это не работает
tibble(x11 = c(1:12)) %>%
mutate(x2 = rep(row_number(), each=3, length.out = n()),
M1=rep(row_number("m"), each=3, length.out = n()),Q=rep(row_number("q"), each=3, length.out = n()))
Ответ №1:
Мы создаем группировку, rep
сопоставляя row_number()
, затем создаем ‘M1’, ‘Q’ с помощью paste
( str_c
) символов ‘m’, ‘q’ с последовательностью строк ( row_number()
), а также используем sample
для выборки числа от 12 до 20 для создания ‘O’
library(dplyr)
library(stringr)
tibble(X1= c(1:12)) %>%
group_by(X2 = factor(rep(row_number(), each=3, length.out = n()))) %>%
mutate(M1 = str_c('m', row_number()), Q = str_c('q', row_number()),
O = sample(12:20, n(), replace = FALSE)) %>%
ungroup
-вывод
# A tibble: 12 x 5
# X1 X2 M1 Q O
# <int> <fct> <chr> <chr> <int>
# 1 1 1 m1 q1 17
# 2 2 1 m2 q2 19
# 3 3 1 m3 q3 20
# 4 4 2 m1 q1 15
# 5 5 2 m2 q2 13
# 6 6 2 m3 q3 17
# 7 7 3 m1 q1 14
# 8 8 3 m2 q2 17
# 9 9 3 m3 q3 15
#10 10 4 m1 q1 16
#11 11 4 m2 q2 19
#12 12 4 m3 q3 12
Комментарии:
1. Большое спасибо, как я могу сделать x2 в качестве фактора?
2. @user330 просто оберните
factor
вокруг него
Ответ №2:
Если ваш фрейм данных равен df, то:
df$O <- sample(12:20, nrow(df), replace = TRUE)