#r
#r
Вопрос:
Я хочу превратить комбинации столбцов в некоторую интерпретируемую переменную. Существует 3 уровня коэффициента, повторяющихся в трех столбцах для каждого идентификатора. Для всех комбинаций между переменными я хотел бы получить список, и когда у меня будет lsit, я хочу знать, сколько раз мы можем найти каждую комбинацию. Например, когда q1 и q2 совпадают, он должен возвращать «A». Затем A появляется XX раз. У кого-нибудь есть предложения? Спасибо!!
id <- 1:10
set.seed(1)
q1 <- sample(1:3, 10, replace=TRUE)
set.seed(2)
q2 <- sample(1:3, 10, replace=TRUE)
set.seed(2)
q3 <- sample(1:3, 10, replace=TRUE)
df <- data.frame(id,q1,q2,q3)
df
df
id q1 q2 q3
1 1 1 1 1
2 2 2 3 3
3 3 2 2 2
4 4 3 1 1
5 5 1 3 3
6 6 3 3 3
7 7 3 1 1
8 8 2 3 3
9 9 2 2 2
10 10 1 2 2
if df$q1=="1" amp; df$q2=="1" print A
if df$q1=="1" amp; df$q2=="2" print B
if df$q1=="1" amp; df$q2=="3" print C
if df$q1=="2" amp; df$q2=="3" print D
if df$q1=="2" amp; df$q2=="2" print E
if df$q1=="3" amp; df$q2=="3" print F
if df$q2=="1" amp; df$q2=="1" print G
if df$q2=="1" amp; df$q2=="2" print H
response <- save(print A, print B, print C and so on....)
length(A)
length(B)
and so on...
Ответ №1:
Я думаю, это должно делать то, что вы хотите, используя базу R. Надеюсь, я понял ваш желаемый результат. Я в основном объединил каждую пару столбцов в свою собственную переменную ( comb.var[, i]
), а затем объединил это с каждой парой имен столбцов, чтобы создать другую переменную output$fct
и переименовал новую переменную, которая представляет каждую комбинацию q-pair x value-pair, и подсчитал появление каждой комбинации с summary()
код:
# dimensions of df
n = nrow(df) #rows
p = ncol(df) #columns
# unique pairs of q columns
pairs.n = choose(p - 1, 2) # number of unique pairs
pairs = combn(1:(p - 1), 2) # matrix of those pairs
# data frame of NAs of proper size
comb.var <- matrix(NA, nrow = n, ncol = pairs.n)
for(combo in 1:ncol(pairs)){
i = pairs[1, combo]
j = pairs[2, combo]
# get the right 2 columns from df
qi = df[, i 1]
qj = df[, j 1]
# combine into 1 variable
comb.var[, combo] <- paste(qi, qj, sep = "_")
}
# clean up the output: turn out.M into vector and add id columns
output = data.frame(data.frame(id = rep(df$id, times = pairs.n),
qi = rep(pairs[1, ], each = n),
qj = rep(pairs[2, ], each = n),
val = as.vector(comb.var)))
# combine variables again
output$fct = with(output, paste(qi, qj, val, sep = "."))
# count number of different outputs
uniq.n = length(unique(output$fct))
# re-label the factor
output$fct <- factor(output$fct, labels = LETTERS[1:uniq.n])
# count the group members
summary(output$fct)