具體信息,我有兩個數據幀,df1
擁有約出版物的年本出版物在一年中總的文章信息,出口名稱,以及文章的累計總和在我讀書的那段時間裏df2
有物品ID的隨機樣本,具有範圍從1到的物品由df1$cumsum
給定總數的潛在值。R:用不同的話語結構得到第三DF與前2
我需要做的是抓取df2
中的每篇文章ID,並使用df1
中包含的信息確定它屬於哪個出版物和哪一年。
這裏是一個最低限度的可重複的例子:
set.seed(890)
df1 <- NULL
df1$year <- c(2000:2009, 2000:2009)
df1$outlet <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,2,2,2,2,2,2,2,2,2)
df1$article_total <- sample(1:200, 20, replace = T)
df1$cumsum <- cumsum(df1$article_total)
df1 <- as.data.frame(df1)
df2 <- NULL
df2$art_num <- sample(1:2102, 100, replace = T) # get random sample of article IDs for the total number of articles I have in this db
df2 <- as.data.frame(df2)
理想情況下,我也想在每年計算的一篇文章的ID。例如,在上面的數據中,outlet 1在2000年有14篇文章,在2001年有168篇(cumsum = 183)。如果我的文章ID是156,我想知道它是2001年出版物1的第142篇文章。對於每個文章ID,我都在這個數據庫中有這樣的等等。
我想我應該用for
循環做到這一點,但我100%在寫它丟失。這是我開始寫作,但我有一種感覺,我不是在正確的軌道上與它:
for i in 1:nrow(df2$art_num){
article_number <- df2$art_num[i]
if (article_number %in% df1$cumsum){ # note: cumsum should be an interval before doing this?
# get article number, year, publication in new df
# also calculate article ID in each year/publication
}
}
在此先感謝您的幫助!我還是失去了在R寫入循環......每弗蘭克的建議
####################### EDITED實例爲
set.seed(890)
df1 <- NULL
df1$year <- c(2000:2002, 2000:2002)
df1$outlet <- c(1, 1, 1, 2,2,2)
df1$article_total <- sample(1:50, 6, replace = T)
df1$cumsum <- cumsum(df1$article_total)
df1 <- as.data.frame(df1)
df2 <- NULL
df2$art_id <- c(66, 120, 77, 156, 24)
df2 <- as.data.frame(df2)
下面是我在尋找的輸出:
art_id outlet year article_number
1 66 1 2002 19
2 120 2 2000 35
3 77 1 2002 30
4 156 2 2001 35
5 24 1 2000 20
這個例子顯示了我在df3
理想的輸出,這是我計算/手工製造。它有一列包含文章的ID,適當的出口,年份和一個新變量art_number
。這是不同於在我的文章ID從df1$cumsum
和df3$art_id
計算它。在這個例子中,第一行示出了在我的數據庫中的第一製品具有66的ID我獲得的19 art_number
值,因爲本文(ID = 66)是由出口1.我發表在2002年第19條通過查看文章ID的基礎上,df1$cumsum
定位年份和插座,然後從其減去從上年df1$cumsum
值art_id
值來計算該值。所以對於這個特定的文章,我計算了df3$art_number = df3$art_id[1,1] - df1$cumsum[2,4]
我需要爲我的數據庫中的每篇文章都做這個計算,所以我不會一直手工做這個過程。
@Frank我所需的輸出是一個包含以下各列第三DF:'$ DF2 art_num','DF1 $ outlet'(基於df2的文章編號),df1 $ year'(基於df2的文章編號)以及理想的'df3 $ article_location'。第三個是基於'df2 $ art_num'和'df1 $ cumsum' ,.我沒有的正是我想是因爲我不會寫代碼來顯示什麼,我需要一個可重複的例子......理想的情況下,cumsum將是一個區間,而不是直線上升的數字,這樣我可以找到中的特定物品的ID它。我不確定我是否有道理,所以讓我知道我是否可以進一步澄清。 – rowbust
@Frank包括一個新的輸出,你可以看到...希望這是有幫助的! – rowbust
@Frank你是對的,我沒有爲'df2'的採樣設置種子。用手寫出來。 – rowbust