2015-03-23 1 views
0

Я новичок в программировании здесь, поэтому извиняюсь, что это рудиментарный вопрос. Я работаю в R.Создание новой переменной условно для ответов для множества других

Мои данные: вкратце, у меня есть список из примерно 30 заболеваний (в некоторых из них - астма, боли в спине и т. Д., Что не обязательно указывает на заболевание, а скорее на какой-то хронический состояние). По каждому вопросу респонденты ответили «1», если у них есть болезнь, «2», если нет, и «88», если они не знали своего статуса болезни.

Я хочу создать новую переменную, называемую «хронической», которая захватывает всех людей, которые имеют хронические состояния 1, 2 или 3+. Конечно, я мог бы сидеть здесь и проходить через все условные условия, но есть эффективный способ сканирования по каждому конкретному столбцу болезни, и если участники ответили «1», создайте какую-то текущую сумму, так что общая сумма в этом новом " хроническая "переменная указывает количество хронических состояний, которые у них есть?

Заранее спасибо

+0

Обычно _no_ представлен как 0, и _yes_ как 1. Я рекомендуйте заменить свои значения на это, а также 88 для 'NA'. С этим вы можете, например, использовать sum() для подсчета количества положительных ответов для данной болезни или респондента. Это можно легко сделать с помощью 'df [df == 88] = NA',' df [df == 2] = 0'. – Molx

+0

@Molx Лучшая идея .. Я попробую этот метод. Мой df не просто содержит переменные заболевания, есть другие демографические вары, такие как возраст и т. Д., Которые кодируются как 2. Есть ли способ выбрать подмножество столбцов (болезнь) и установить значения «2» на «0», как вы предполагали? Я придумываю что-то вроде этого .. но при запуске ничего не меняется (8, 24 представляют номера столбцов): nhss [nhss [, c (8:24) == 2]] = 0 – Jason

+0

Если вы хотите чтобы ограничить ваши изменения в определенных столбцах, вы подмножите эти столбцы перед подмножеством строк, которые вы хотите изменить: 'nhss [, 8: 24] [nhss [, 8: 24] == 2] = 0'. – Molx

ответ

1

Вы хотите использовать один из apply functions. В этом случае, если ваш data.frame называется df, то вы можете суммировать количество ответов, равное 1, используя apply() как в:

apply(df, 
     1, # apply for each row (i.e. the first margin) 
     function(x)# a function which takes a row's worth of data as it's argument 
      sum(x ==1))# and returns the number of responses equal to 1 
+0

Это было бы намного проще: 'rowSums (df ==" 1 ")' –

+0

Как всегда @BondedDust :) – Jthorpe

+0

Спасибо, ребята, это было очень полезно. – Jason

Смежные вопросы