Преобразование набора данных только с 0 и 1 значениями
Я не уверен, как это назвать, поэтому я постараюсь описать в терминах мирян, в чем проблема. У меня есть датафрейм, который состоит только из 0 и 1. Поэтому для каждого человека вместо одного столбца с факториальной стоимостью (например, низкая цена, 4 номера) у меня есть
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0
2 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 1
3 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0
4 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0
Как я могу преобразовать набор данных в R, чтобы я мог создать новые столбцы (#number of rooms) и присвоить положению 1 (в 4-м столбце) vhigh значение? У меня есть несколько дорогих вариабалов, для которых мне нужно это сделать. 21 столбец представляет 6 переменных для 1000+ наблюдений. должно быть что-то вроде этого
PurchaseP. NumberofRooms ...
1. vhigh. 4
2. low. 4
3. vhigh. 1
4. vhigh. 2
Только что сделал это для первых двух эпсиленаторных вариабелей, но, по сути, он повторяется так, что каждая объяснительная переменная имеет 3-4 возможных факторных значения.
V1: V4 = цена покупки, V5:V8 = количество комнат,V9:V11 = этажи и т. Д.
В моей голове что-то подобное может сработать
- создайте if statemt, чтобы дать каждому 1 значение в зависимости от положения столбца, напр. если значение в V4=1, тогда назовите "vhigh". и сделать это для каждого Vx
- Затем объедините каждый столбец V1:V4, V5:V8, V9:V11 (в зависимости от того, имеет ли он 3-4 возможных факторных / целочисленных значения), игнорируя при этом 0 значений.
Будет ли это работать, или есть более простой подход? Как бы один код это в R?
2 ответа
Если набор данных содержит одну единицу в строке, это довольно простая проблема
Здесь ваши данные в соответствии с вашей картинкой (пожалуйста, отредактируйте ваш вопрос, чтобы поставить код вместо картинки)
df = data.frame(r1 = 0, r2 = 1, r3 = 0)
rownames(df)<- 1
Затем вы просто должны сложить свой столбец с номером комнаты в качестве веса
df$room = df$r1*1 + df$r2 * 2 + df$r3 *3
Вы можете использовать функцию, которая () похожа на
lapply(df, function(x) { %now x is a row
idx = which(x == 1)[1]
return(idx)
})
Интересная часть заключается в использовании which(x ==1)
на каждом ряду. Это дает вам массив всех индексов, которые содержат единицу. Первый из них может использоваться в вашем случае (при условии, что у вас есть только один 1 на строку). В противном случае необходимо обсудить агрегирование. Полученный столбец можно затем преобразовать в фактор, дав разумные имена различным индексам.