Как мы можем изменить запятые числа в каждой ячейке на одно число в R - PullRequest
1 голос
/ 03 октября 2019

У меня есть набор данных со столбцами (M1 и M2 ... M20) с такими ответами:

ID  M1     M2
1   4,7     5,6
2   4,7     6,5
3   5,4     4,6
> class(dataframe$M1)
[1] "character"

Я хочу изменить параметры ответа с разделенных запятыми чисел на одно число,Таким образом, это должно выглядеть так, где правильный ответ для столбца M1 (4,7) заменяется на 1, иначе 0 и аналогично для M2 до M20.

ID  M1     M2
1   1     1
2   1     1
3   0     0

И это я хочу для всего набора данных, который имеет идентификаторы в виде строк и 20 столбцов в качестве ответов. В то время как другие столбцы имеют свои уникальные значения, которые должны быть заменены на 1 и 0. Я хотел бы иметь решение для одного столбца, который может быть изменен и реплицирован.

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 03 октября 2019
dataframe$M1<-as.numeric(dataframe$M1=="4,7")

Это даст вам столбец из 1 и 0.

Если у вас есть список всех «правильных ответов» для каждого столбца - например:

answers<-list("4,7",c("5,6","6,5"))

Вы можете пройти через них:

for (i in 1:length(answers)) {
   dataframe[,i+1]<-as.numeric(dataframe[,i+1] %in% answers[[i]])
 }

dataframe
  ID M1 M2
1  1  1  1
2  2  1  1
3  3  0  0
0 голосов
/ 03 октября 2019

Предположим, M, что воспроизводимо показано в примечании в конце, а также у нас есть список correct, чей i-й компонент является вектором значений тех ответов на i-й вопрос, которые являются правильными. Если существует несколько правильных ответов, то i-й компонент correct является вектором их. Тогда мы можем использовать следующие значения mapply

Recode <- function(m, cor) m %in% cor
replace(M, -1, + mapply(Recode, M[-1], correct))

:

  ID M1 M2
1  1  1  1
2  2  1  1
3  3  0  0

Пакеты не используются.

Примечание

Входы вВоспроизводимая форма:

Lines <- 
"ID  M1     M2
1   4,7     5,6
2   4,7     6,5
3   5,4     4,6"
M <- read.table(text = Lines, header = TRUE, as.is = TRUE)

# correct[[i]] is a character vector of the correct answers for question i
correct <- list("4,7", c("5,6", "6,5"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...