Arhn - архитектура программирования

R преобразовать переменную в значения переменных из другого наблюдения, используя цикл, условие ifelse и подмножество (dplyr)

см. мой воспроизводимый и желаемый результат ниже.

Я хочу создать новую переменную, в которой я объединяю значения переменных из других наблюдений (строк), которые я хочу идентифицировать в цикле, используя подмножество. Состояние подмножества должно быть определено циклом. В примере 1 subset(df, country == i) не работает, но вручную (в примере 2) subset(df, country == 'US') работает. Я думал, что country == i и country == 'US' должны быть почти одинаковыми.

# create a df
country <- c('US', 'US', 'China', 'China')
Trump_virus <- c('Y', 'N' ,'Y', 'N')
cases <- c (1000, 2000, 4, 6)
df <- data.frame(country, Trump_virus, cases)
#################################################### Ex.1
for (i in df$country) {
 print(i)
 df <- df %>%
  mutate(cases_corected = ifelse(
   Trump_virus == 'Y'
   ,subset(df, Trump_virus == 'N' & country ==  i)$cases*1000
   ,'killer_virus'
  ))}
##
df$cases_corected
#################################################### Ex.2
    for (i in df$country) {
 print(i)
 df <- df %>%
  mutate(cases_corected = ifelse(
   Trump_virus == 'Y'
   ,subset(df, Trump_virus == 'N' & country ==  'US')$cases*1000
   ,'killer_virus'
  ))}
##
df$cases_corected
################################################### Desired output
> df$cases_corected
[1] "2e+06"       
[2] "killer_virus"
[3] "6000"        
[4] "killer_virus"

Ответы:


1

Вот решение с dplyr. Обновлено в зависимости от изменения желаемого результата

df <- df %>%
  mutate(country=toupper(country)) # to get same names for other variants of a country  #e.g. China and china

#genearting a dataset which have cases only for Trump_virus==N
df1<-df %>% 
  dplyr::filter(Trump_virus=="N") %>% 
  dplyr::mutate(ID= "Y",
                cases_corected=cases*1e3) %>%
  dplyr::select(-c(cases,Trump_virus))

# final merging
df<-df %>% 
  left_join(df1,by=c("country"="country","Trump_virus"="ID")) %>%
  mutate(cases_corected=ifelse(is.na(cases_corected),'killer_virus',cases_corected))

df

  country Trump_virus cases cases_corected
1      US           Y  1000          2e+06
2      US           N  2000   killer_virus
3   CHINA           Y     4           6000
4   CHINA           N     6   killer_virus
12.05.2020
  • Извините, у меня раньше была опечатка в моем примере (сейчас исправлено). Я не хочу умножать значение из той же строки, но из другой строки, которую я пытаюсь определить по подмножеству и текущей итерации. 12.05.2020
  • Обновил мой ответ соответственно 12.05.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..