У меня есть головоломка и я буду очень благодарен за любую помощь. Мне нужно написать фрагмент кода, который требует записи одной строки, чтобы она соответствовала более крупному автоматическому процессу. Я привел некоторые фиктивные данные, чтобы помочь проиллюстрировать.Как суммировать заявления ifelse «на лету» с [R]
У меня есть три утверждения ifelse, которые возвращают 1 или 0. Мне нужно суммировать эти 1 и 0, но из-за других унаследованных ограничений в моих реальных данных я не могу ссылаться на их вывод ', а затем' суммировать их. Мне нужно «суммировать их на лету».
Чтобы быть явным ... Я не могу явно ссылаться на выходные данные 1 и 0 либо «use_sms», «use_data», либо «use_voice», и я не могу просто передать заявку/1/sum в dataframe.
Как-то, что мне нужно, это полностью находится сумма трех IfElse-х, что-то вдоль линий ... в сырой, не язык г ...
sum(
ifelse(sms_rev0 & sms_cnt0 > 0 | sms_rev1 & sms_cnt1 > 0 | sms_rev2 & sms_cnt2 > 0, 1, 0),
ifelse(data_rev0 & data_cnt0 > 0 | data_rev1 & data_cnt1 > 0 | data_rev2 & data_cnt2 > 0, 1, 0),
ifelse(voice_rev0 & voice_cnt0 > 0 | voice_rev1 & voice_cnt1 > 0 | voice_rev2 & voice_cnt2 > 0, 1, 0)
)
Мои реальные данные представлены мне похож на этот headache_df
headache_df = data.frame(sms_rev0 = sample(1:0, 10, replace = T),
sms_cnt0 = sample(1:0, 10, replace = T),
sms_rev1 = sample(1:0, 10, replace = T),
sms_cnt1 = sample(1:0, 10, replace = T),
sms_rev2 = sample(1:0, 10, replace = T),
sms_cnt2 = sample(1:0, 10, replace = T),
data_rev0 = sample(1:0, 10, replace = T),
data_cnt0 = sample(1:0, 10, replace = T),
data_rev1 = sample(1:0, 10, replace = T),
data_cnt1 = sample(1:0, 10, replace = T),
data_rev2 = sample(1:0, 10, replace = T),
data_cnt2 = sample(1:0, 10, replace = T),
voice_rev0 = sample(1:0, 10, replace = T),
voice_cnt0 = sample(1:0, 10, replace = T),
voice_rev1 = sample(1:0, 10, replace = T),
voice_cnt1 = sample(1:0, 10, replace = T),
voice_rev2 = sample(1:0, 10, replace = T),
voice_cnt2 = sample(1:0, 10, replace = T))
row.names(headache_df) = paste0("row", 1:10)
И я ищу, чтобы захватить мои результаты в этой головной боли борьбе panado_df
panado_df = data.frame(user = row.names(headache_df))
attach(headache_df)
set.seed(1234)
Я генерирую три ifelse заявления, чтобы проиллюстрировать, но в моих реальных данных действительно это сумма, которую мне нужно захватить.
panado_df$use_sms = ifelse(sms_rev0 & sms_cnt0 > 0 | sms_rev1 & sms_cnt1 > 0 | sms_rev2 & sms_cnt2 > 0, 1, 0)
panado_df$use_data = ifelse(data_rev0 & data_cnt0 > 0 | data_rev1 & data_cnt1 > 0 | data_rev2 & data_cnt2 > 0, 1, 0)
panado_df$use_voice = ifelse(voice_rev0 & voice_cnt0 > 0 | voice_rev1 & voice_cnt1 > 0 | voice_rev2 & voice_cnt2 > 0, 1, 0)
rownames(panado_df) = panado_df$user
panado_df$user = NULL
Представляю целевой столбец, чтобы проиллюстрировать, как должны выглядеть мои рассчитанные данные. Какие-нибудь интересные решения для достижения моей цели, пожалуйста?
panado_df$target_column = apply(panado_df, 1, sum)
Привет @mabdrabo. К сожалению, это возвращает общую сумму для всего объекта target_column. Мне нужна сумма подряд за строкой. – CallumH
Hi @mabdrabo. У меня есть проблема в том, что в моих реальных данных panado_df является частью более крупного процесса, и я не могу принудить его к headache_df. Я пытаюсь использовать ваш предлагаемый код, чтобы напрямую добавить столбец в panado_df. Пока нет успеха, но я собираюсь поиграть с ним. :) – CallumH
@CallumH - если бы вы могли поделиться больше, мы могли бы помочь. Удачи :) – mabdrabo