Подстановка фреймов данных в R - PullRequest
0 голосов
/ 30 октября 2018

Я новичок в Python / R и начал применять его на своем рабочем месте. Сейчас я пытаюсь решить небольшую проблему, которая у меня есть.

Задача: Мне нужно скачать файл .csv (разделенный точкой с запятой) и импортировать этот файл в Excel, отсортировать для недавно обновленных сайтов (есть столбец W с заголовком «Обновление»). Из обновленных сайтов создайте два новых файла Excel: один для европейских сайтов, другой для неевропейских сайтов.

Мой первоначальный мыслительный процесс был таким:

  • список стран ЕС (самый короткий список)
  • отдельные сайты, требующие обновления <- Update_sites </li>
  • отдельные сайты Update_site для сайтов ЕС и не входящих в ЕС
  • запись сайтов ЕС и других стран в независимые файлы Excel.

Мне удалось заставить его работать, когда в столбце или разделе обновления написано "New":

install.packages("openxlsx")
library("openxlsx")
European_countries <- c("Andorra","Austria","Belarus","Belgium","Bosnia and Herzegovina","Bulgaria","Croatia","Czech Republic","Denmark","Estonia","Finland","France","Germany","Greece","Hungary","Iceland","Ireland","Italy","Latvia","Liechtenstein","Lithuania","Luxembourg","Malta","Moldova","Monaco","Montenegro","Netherlands","Norway","Poland","Portugal","Romania","Russia","San Marino","Serbia","Slovakia","Slovenia","Spain","Sweden","Switzerland","Ukraine","United Kingdom")

origin <- choose.files()

MyData <- read.csv(origin, sep = ";", header = TRUE,) 

Update_sites <- subset(MyData, Update == "Updated") 

EU_site <- Update_sites[Update_sites$Country %in% European_countries,]

'%ni%' <- Negate('%in%')

Not_EU_site <- Update_sites[Update_sites$Country %ni% European_countries,]

write.xlsx(EU_site, "C:/Users/WalzthE/Downloads/European_sites.xlsx") 
write.xlsx(Not_EU_site, "C:/Users/WalzthE/Downloads/Not_european_sites")

Однако моя проблема возникает в следующих случаях:

  1. Когда значения столбца обновления отличаются от новых, или да. Иногда они заполняются словами «Обновлено / мобильный телефон / менеджер сайта / местные жители» ИЛИ «Новый / менеджер» или «Обновлено / факс». Я хочу создать подмножество ячеек, просто имея контент. Я просматривал форумы и нашел что-то вроде:

    z <- character(0)
    subset(df, !(rownmaes(df) %in% z)) 
    

    но это мне не помогло ...

  2. Я хочу иметь возможность выбрать, куда сохранять файлы, а не сохранять в заранее определенной папке. Это не так важно, как пункт 1, просто чтобы дать больше возможностей пользователям.

  3. В файле csv есть конкретные данные, такие как "Study No. XYXY" и "LOL-123", эти два составляют имя файла в конце, когда мне нужно его сохранить, как можно Я объединяю оба из них так, чтобы окончательное имя файла было: «Исследование №XYXY_LOL-123»

Заранее спасибо, любая помощь приветствуется!

1 Ответ

0 голосов
/ 30 октября 2018

Я бы начал с написания скрипта без взаимодействия типа choose.files. Как то так:

input_file <- "file.txt"
output_eu <- "eu.xlsx"
output_noteu <- "noteu.xlsx"

url <- "http://????"
download.file(url, "file.txt")

eu <- c("Andorra","Austria","Belarus","Belgium","Bosnia and Herzegovina","Bulgaria","Croatia","Czech Republic","Denmark","Estonia","Finland","France","Germany","Greece","Hungary","Iceland","Ireland","Italy","Latvia","Liechtenstein","Lithuania","Luxembourg","Malta","Moldova","Monaco","Montenegro","Netherlands","Norway","Poland","Portugal","Romania","Russia","San Marino","Serbia","Slovakia","Slovenia","Spain","Sweden","Switzerland","Ukraine","United Kingdom")

d <- read.table(input_file, sep = ";", header = TRUE) 
# get all cases where there is some text in the Update field
updates <- d[d$Update != "", ]
i <- updates$Country %in% eu
eu_up <- update[i,]
noteu_up <- update[!i,]

library(writexl)
write_xlsx(eu_up, output_eu) 
write_xlsx(noteu_up, output_noteu)

(также нет такой вещи, как .csv file separated by semicolon; c обозначает запятую)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...