2017-12-06 1 views
-1

다음 기능을 사용하는 데 도움이됩니다. ('years'에서) 값을 취하고 data.frame(searches)에서 간단한 grep을 실행하는 함수를 만들려고합니다.R의 기본 grep 기능이있는 방향 찾기 (기능에 통합)

data.frame(searches)은 다음과 같습니다.

> data.table(searches)[53:58] 
     date hits keyword   geo gprop category 
1: 2014-01-05 34 Price world    web  0 
2: 2014-01-12 25 Price world    web  0 
3: 2014-01-19 44 Price world    web  0 
4: 2014-01-26 30 Price world    web  0 
5: 2014-02-02 31 Price world    web  0 
6: 2014-02-09 29 Price world    web  0 

은 내가 그렙 기능을 사용하여 순간에 2013, 2014, 2015 등, 매년 추출하고, 상기 data.frame " date"와 " hits"에서 불과 열을 저장하려합니다.

현재 가지고있는 코드는 다음과 같습니다.

years <- c("2013", "2014", "2015", "2016", "2017") 


func_src <- for(i in ncol(1:5)){ 

    func_src[i] <- searches[grep(years(ncol[1:5]), searches$date),] 
    print(func_src[i]) 
} 

이 값은 NULL 값을 반환합니다.

내가

colnames <- date hits1 hits2 hits3 hits4 

같은 것을 (나는 날짜를 기준으로 데이터를 정리하고 키워드로 키워드 있지 않다 할 것이다 얻기 바라고 최종 출력은 이전의 입력, 즉 "sell world"과에 따라 변경 될 수 있습니다 날짜는 2014, 2015, 2016은 변경되지 않습니다.

편집 : 명확히하기 위해 모든 코드를 붙여 추가 설명을 추가합니다.

다음 코드는 현재 내가있는 곳 (1230384680661245350072의 숫자가 중요하지 않도록 데이터/var 이름을 테스트하는 것입니다)에 연결됩니다.

library(gtrendsR) 

Variable_names <- c("VAR1") 

keywords <- c("US news", "", "Canada News", "US Car news", "Canada Car news") 

trends <- apply(expand.grid(Variable_names, keywords), 1, paste, collapse=" ") 
trends 

searches <- gtrends(trends)$interest_over_time 
searches <- searches[-c(1:4), ] 


years <- c("2013", "2014", "2015", "2016", "2017") 

이 코드를 실행 한 후, 나는 2013 년에서 각 키워드가 등 다른 년에 걸쳐 분할하는 함수, 2013, 2014, 2015 적용 할 수 있도록 노력하겠습니다 : 2017 난 날짜 열을 유지에만 관심 열을 친다. 그래서;

data.frame을 만들어 날짜 열을 만든 다음 2017 년에 도달하면 각 행으로 분할하려고합니다 (새 키워드가 적용될 때).

는 궁극적으로 나는 각 열은 각 키워드 dataframe에서 "키워드"에 해당한다 명중

date hits1 hits2 hits3 hits4 

acheive하는 것을 시도하고있다 (그러나 나는 올해가 아닌 키워드에 분할하는 것을 시도하고있다)

희망 이것은 내가 조금 더 명확하게하려고 노력하는 것을 만든다.

+0

1 년을 끝내고 궁극적으로 무엇을하려고합니까? 어떻게 생겼는지에 대한 예제 테이블을 제공 할 수 있습니까? –

답변

0

코드는 함수를 정의하지 않으며 작성된대로 실행하면 안됩니다. ncol은 정의 된 변수가 아니며 서브 세트 (ncol[1:5])입니다.아래에 몇 가지 예제 코드 syntatically 유효 참조 반복적으로 나열된 년 동안 검색합니다 : 수년에 걸쳐 반복되는,

years <- c("2013", "2014", "2015", "2016", "2017") 
## Define a list to store the results 
year_results <- list() 
## A simple function which "greps" for the year and returns all results 
func_src <- function(year) { 
    searches[grep(year, searches$date), ] 
} 
## You can simply iterate through the vector "years" 
for (year in years) { 
    ## Store the result with the year as a name 
    year_results[[year]] <- func_src(year)  
} 
print(year_results) 

은 또한 당신이 lapply 기능을 사용할 수 있으며 목록에 결과를 저장 :

lapply(years, func_src) 

그리고 명명 된 목록을 원하는 경우 :

setNames(lapply(years, func_src), years) 
+0

입력 해 주셔서 감사합니다. 나는 정말로 그것을 호소한다. 그것은 내가 무엇을하고 있는지 정확하게 알려주지 않는다. 5 분만 주시면 원본 질문에 모든 코드를 넣으므로 재현이 가능합니다. – user113156

0

을 나는 당신이 지나친 것 같아요!

lubridate 패키지를 사용하여 1 년을 빠져 나올 수 있습니다. 이것은 tidyverse에 포함되어 있습니다.이 패키지는 훌륭한 정리 패키지입니다.

library(tidyverse) 

searches_new <- searches %>% 
    mutate(year = year(date)) %>% 
    select(year, date, hits) 

그러면 올해의 새 열이 만들어집니다. 나는 당신이 더 명확하게하지 않고 원하는 최종 결과물을 확신하지 못합니다. 하지만 당신은 그냥 group_by 일부를하거나 활용하고 싶을 것입니다. spread