簡體   English   中英

將唯一值從一列復制到另一列

[英]Copy unique values from one column to another R

我最近開始使用R,雖然我有一本手冊,但我仍然發現在那里找不到我需要的功能。 這是我偶然發現的一個問題。

我的數據看起來像這樣:

col1    col2    col3
Alex    NA  URL
Mike    URL NA
John    URL URL
Peter   NA  NA
James   NA  URL

Col1將始終是唯一的分類值。 Col2代表這些人來自我的網站的來源(URL意味着那里有一個完整的URL,http:www.facebook.com)。 NA表示用戶來到我的網站病毒。 Col3代表referal(用戶來自何處的另一個指示)。

我需要做的是根據以下條件將數據從col3傳輸或復制到col2:如果在第3列中我有一個URL而在col2中我有NA,那么帶有來自col3的URL的單元格我需要將它復制到COL2。 如果col3和col2都有URL,那么我不想在那里發生任何事情。 如果col 3有NA而col2有URL,我再也不希望有任何改變。 這是所需的輸出

col1    col2                    col3   
Alex    URL(copied from col3)   URL
Mike    URL(kept this URL)      NA
John    URL(kept this URL)      URL
Peter   NA(Kept NA)             NA
James   URL(copied from col3)   URL

因此,Alex和James從col3獲得了URL,John和Mike保留了他們在col2中的初始URL,而Peter保留了他的NA。

現在,我已經到處查看,即使在這個網站上也無法找到任何關於使用“IF”條件將數據從一列復制到另一列的信息。 我發現的唯一一件事是如何使用“合並”功能將整個列從一個數據幀復制到另一個數據幀,但除此之外別無其他。

是否存在可以實現此功能的功能?

你的例子是不可復制的,所以我必須自己創建一些:

dat = data.frame(name = sample(c("John", "James", "Peter"), size = 10, replace = TRUE),
                 source = sprintf("http://www.%s.com", sample(LETTERS, size = 10)),
                 referal = sprintf("http://www.%s.com", sample(LETTERS, size = 10)))
# Introduce some NA's
dat[c(1,3,9), "source"] <- NA
dat[c(2,7), "referal"] <- NA
> dat
    name           source          referal
1   John             <NA> http://www.W.com                          
2  James http://www.M.com             <NA>                          
3   John             <NA> http://www.Z.com                          
4  Peter http://www.J.com http://www.L.com                          
5  Peter http://www.L.com http://www.H.com                          
6  Peter http://www.T.com http://www.U.com                          
7  James http://www.E.com             <NA>                          
8  Peter http://www.K.com http://www.K.com                          
9  Peter             <NA> http://www.R.com                          
10 James http://www.Z.com http://www.N.com 

您正在尋找的功能稱為ifelse

dat = within(dat, { 
      source = as.character(source)
      referal = as.character(referal)
      source = ifelse(is.na(source), referal, source) 
    } )
> dat
    name           source          referal
1   John http://www.W.com http://www.W.com                          
2  James http://www.M.com             <NA>                          
3   John http://www.Z.com http://www.Z.com                          
4  Peter http://www.J.com http://www.L.com                          
5  Peter http://www.L.com http://www.H.com                          
6  Peter http://www.T.com http://www.U.com                          
7  James http://www.E.com             <NA>                          
8  Peter http://www.K.com http://www.K.com                          
9  Peter http://www.R.com http://www.R.com                          
10 James http://www.Z.com http://www.N.com   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM