Превратить комбинации столбцов в некоторую интерпретируемую переменную

#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)