Вы можете достичь этого в базе R с ave
:
df$cross <- ave(df$Political_party, df$Address, FUN=function(i) length(unique(i)) > 1)
Это добавит логический вектор к вашему data.frame где это ИСТИНА, если есть более чем одна партия, представленная в домашнем хозяйстве. Я бы рекомендовал работать с логическими векторами, а не с буквами, так как R будет относиться к ним естественным образом. Это возвращает
df
Name Address Political_party cross
1 Jane 10 D FALSE
2 David 10 D FALSE
3 Kate 105 R FALSE
4 Tom 40 D TRUE
5 Lee 40 D TRUE
6 Ann 40 R TRUE
мне пришлось внести незначительные изменения в данных, чтобы читать его, которые не вредят целостности результата.
данные
df <-
structure(list(Name = c("Jane", "David", "Kate", "Tom", "Lee",
"Ann"), Address = c(10L, 10L, 105L, 40L, 40L, 40L), Political_party = c("D",
"D", "R", "D", "D", "R")), .Names = c("Name", "Address", "Political_party"
), row.names = c(NA, -6L), class = "data.frame")
Этот код будет работать более 2-х сторон. Рассмотрим, например, следующие data.frame.
set.seed(1234)
df2 <- rbind(df, within(df, {Political_party <- sample(LETTERS[1:3], nrow(df), replace=TRUE)
Address <- Address + 1L}))
Здесь я удвоил количество домашних хозяйств и добавил больше вечеринок. Новый data.frame приведен ниже.
df2
Name Address Political_party
1 Jane 10 D
2 David 10 D
3 Kate 105 R
4 Tom 40 D
5 Lee 40 D
6 Ann 40 R
7 Jane 11 A
8 David 11 B
9 Kate 106 B
10 Tom 41 B
11 Lee 41 C
12 Ann 41 B
Теперь, используя код,
df2$cross <- ave(df2$Political_party, df2$Address, FUN=function(i) length(unique(i)) > 1)
мы получаем
df2
Name Address Political_party cross
1 Jane 10 D FALSE
2 David 10 D FALSE
3 Kate 105 R FALSE
4 Tom 40 D TRUE
5 Lee 40 D TRUE
6 Ann 40 R TRUE
7 Jane 11 A TRUE
8 David 11 B TRUE
9 Kate 106 B FALSE
10 Tom 41 B TRUE
11 Lee 41 C TRUE
12 Ann 41 B TRUE
Обратите внимание, что в новых наблюдениях, только одноточечно семья не имеет перекрестную сторону. Также обратите внимание, что значения в предыдущем кадре data.frame не затрагиваются.
Спасибо. Я использовал код, но он не работал. он дал результат как AC 0, AD 0, AE 0, D 8907 и т. д. AC, AD, AE являются другими уровнями в Polit_Party, и существует около 30 различных уровней, тогда как R и D являются самыми большими двумя уровнями. Интересно, потому что в политической партии есть более двух уровней? –
Я не уверен, что вы имеете в виду. Вы задаете вопрос о двоичной переменной, и вы сообщаете целочисленные значения в комментарии. Если это подсчеты домашних хозяйств с межпартийной принадлежностью, то возможно, что в ваших данных нет ни одного. – lmo
жаль, что я сделал это запутанным. Я думаю, ваше замечание объясняет, почему это не сработало. Политическая партия не является двоичной переменной, а имеет 30 разных уровней. Можете ли вы посоветовать, как изменить синтаксис? Благодарю. –