2014-01-29 6 views
0

Мой формат CSV файлов являютсяКак получить все значения определенного столбца на основе определенного значения в другом столбце в R?

Camp.CSV

Campaign,AdGroup,Keyword,Status 
florida,orlando,floridaorlando,Paused 
new york,albany,new yorkalbany,Active 

geo_fl.csv

Campaign,Adgroup 
florida,orlando 
florida,miami 
new york,new york 
california,san francisco, 
california,los angeles 

Я хочу, чтобы перечислить все ADgroup в 'geo_fl.csv' на основе 'Кампании' в 'Camp.csv', как для florida в 'Camp.csv', он должен вернуть значения (orlando, miami) в 'geo_fl.csv'

Пока код такой же, как и для llows -

# Declare function to check with the presence of the 'campaignname' or not 
campaignname <- function(point1, point2) { 
conditioncheck <- any(point2==point1) 
} 
# Declare a function to check the presence of the 'adgroupname' or not 

# Read the CSV files for reference 
newlistings <- read.csv("/home/chi/Downloads/Camp.csv",header=TRUE) 
georeportrecord <- read.csv("/home/chi/Downloads/geo_fl.csv",header=TRUE) 
# Store the data of each column in a variable for 'Camp.csv' 
Keyword <- newlistings$keyword 
campaign <- newlistings$Campaign 
adgroup <- newlistings$AdGroup 
status <- newlistings$Status 
# Store the data of each column in a variable for 'geo_fl.csv' 
geoCampaign <- georeportrecord$Campaign 
geoAdGroup <- georeportrecord$Adgroup 

# getting the values for 'number of rows' in each CSV list 
nCGM <- nrow(newlistings) 
nAdwords <- nrow(georeportrecord) 

Pts2 <- georeportrecord[,c("Campaign")] 
CGMGeoList <- NULL 
# checking for the presence of the element in the vector 
#for(i in campaign){ 
for(i in 1:nCGM){ 
Pts1 <- NULL 
Pts1$Campaign <- (newlistings$Campaign[i]) 
# passing the value to the function for 'campaign' presence check 
checkcondition <- campaignname(Pts1,Pts2) 
if(checkcondition == TRUE){ 
    ad <- geoAdgroup[which(geoCampaign==i)# Stuck here(returning no result) 
} 
} 

Кроме того, я попытался

for(i in campaign) 
{ if (any(geoCampaign==i) == TRUE){ 
print(i) 
# But also I want to list all adgroup for 'geo_fl.csv' together. 

}}

Мой желаемый результат

Campaign,AdGroup,Keyword,Status,Campaignpresentingeo_fl,Adgrouppresentingeo_fl 
florida,orlando,floridaorlando,Paused,YES,YES 
new york,albany,new yorkalbany,Active,YES,NO 

Условие для выше желаемого результата

for(i in campaign){ 
If((i present in georeportrecord)==TRUE))#for that particular 'campaign' in 'Camp.csv' check the condition for 'Adgroup' in 'geo_fl.csv' 
{ If ((AdGroup[i] present in georeportrecord$Adgroup)==TRUE))#AdGroup for that particular 'campaign' 'i' in 'Camp.csv' is also present as an adgroup in 'geo_fl.csv' 
{ 
output write.csv(florida,orlando,floridaorlando,Paused,YES,YES) 
}else{ 
write.csv(florida,orlando,floridaorlando,Paused,YES,NO) 
} 
}else{write.csv(florida,orlando,floridaorlando,Paused,NO,NO) 
} 

Вывод данных в файл CSV, всего 2 дополнительных столбца в Camp.csv, который указывает ДА ​​и НЕТ Как перечислить значения, указанные выше, так что Я могу записать в другой CSV-файл, пожалуйста, помогите мне с следующий, новый для R, Любая помощь приветствуется.

+0

ли 'слияния (newlistings, georeportrecord, by = "Кампания") 'дает вам то, что вы хотите? Кроме того, для целей вашего вопроса не имеет значения, что данные начинаются в файлах CSV; после чтения в R данные находятся в 'data.frame'. –

+0

@BrianDiggs: условие if не проверяется. Я не понимаю, почему? Позвольте мне попытаться с этим в основном. – user3188390

+0

Вы ищете 'match()'. Вы преуспеете, чтобы ваши вопросы были намного короче и краткими. Этот вопрос можно было бы легко сформулировать менее чем в 10 строках. – geotheory

ответ

1

После требуемой мощности,

x<-read.csv(text='Campaign,Adgroup 
florida,orlando 
florida,miami 
new york,new york 
california,san francisco 
california,los angeles', header=T, stringsAsFactors=F) 


y=read.csv(text="Campaign,AdGroup,Keyword,Status 
florida,orlando,floridaorlando,Paused 
new york,albany,new yorkalbany,Active", header=T, stringsAsFactors=F) 

Campaigns<-x$Campaign 
AdGroups<-interaction(x$Campaign, x$Adgroup) 

y$campaignpresence<-ifelse(y$Campaign %in% Campaigns,"YES", "NO") 
y$geopresence<-ifelse(interaction(y$Campaign, y$AdGroup) %in% AdGroups,"YES", "NO") 

выходного

y 
    Campaign AdGroup  Keyword Status campaignpresence geopresence 
1 florida orlando floridaorlando Paused    YES   YES 
2 new york albany new yorkalbany Active    YES   NO 

игнорировать ниже, так как она ответила отдельная вещь

другой подход с данными .Таблица. Я даже не вижу необходимости в первой таблице camp.csv при условии, что у вас есть все ваши уникальные кампании во второй таблице.Я только что сделал dummmy данные здесь, где x является ваш campaign и y Ваш Adgroup

require(data.table) 
x<-data.frame(x=sample(1:10, 100, replace=T), y=sample(100:999,100)) 
y<-data.table(x) 
l<-y[,list(y=list(y)),by=x] 
l$y<-sapply(l$y, paste, collapse=",") 
write.table(l,...) 

Будьте осторожны с записью в формате CSV, потому что ваша вторая колонка теперь запятая в нем, так TSV может быть лучше

+0

Привет, колонка 'y' здесь представляет собой« список »(символ', 'довольно симпатичный). Вы не можете использовать 'write.table' со столбцами списка. Я думаю, вам придется« вставлять ». – Arun

+0

@Ananta: Изменен мой вопрос до нужного выхода. – user3188390

+0

@Arun: Спасибо за предложение. Я изменил свой вопрос на требуемый результат. Заранее благодарим за дальнейшую помощь. – user3188390

1

Неясно, что вы хотите, чтобы ваш выход выглядеть, но вот простой способ объединить все уровни одного фактора, принадлежащих каждому из уровней другого фактора:

georeportrecord <- read.csv(text='Campaign,Adgroup 
florida,orlando 
florida,miami 
new york,new york 
california,san francisco 
california,los angeles', header=TRUE) 

newlistings <- read.csv(text='Campaign,AdGroup,Keyword,Status 
florida,orlando,floridaorlando,Paused 
new york,albany,new yorkalbany,Active', header=TRUE) 

out <- aggregate(subset(georeportrecord, 
         Campaign %in% newlistings$Campaign)$Adgroup, 
       list(Campaign=subset(georeportrecord, 
         Campaign %in% newlistings$Campaign)$Campaign), 
       paste0) 

out 

    Campaign    x 
1 florida orlando, miami 
2 new york  new york 

Используйте write.csv, чтобы написать данные в csv (см. ?write.csv).

РЕДАКТИРОВАТЬ: (После уточнения желаемых результатов)

Приведенный выше код возвращает сцепленный строка, содержащая присутствует в Группы объявлений каждой кампании, которая существует в newlistings. Чтобы представить в соответствии с просьбой ОП:

newlistings$Campaignpresentingeo_fl <- 
    newlistings$Campaign %in% georeportrecord$Campaign 

newlistings$Adgrouppresentingeo_fl <- 
    apply(newlistings, 1, function(x) x[2] %in% 
      subset(georeportrecord, Campaign==x[1])[, 'Adgroup']) 
+0

Я хочу проверить наличие florida в 'Camp.csv' в 'geo_fl.csv', а затем перечислить всю Adgroup для florida в 'geo_fl.csv' – user3188390

+0

Я изменил вопрос для моего требуемого вывода. Спасибо за помощью, пожалуйста, помогите мне получить ответ. – user3188390

+0

@ user3188390: Я отредактировал ответ так, чтобы учитывались только Кампании, которые существуют в 'newlistings'. – jbaums

Смежные вопросы