我最近开始使用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”条件将数据从一列复制到另一列的信息。我发现的唯一一件事是如何使用“合并”功能将整个列从一个数据帧复制到另一个数据帧,但除此之外别无其他。
是否存在可以实现此功能的功能?
答案 0 :(得分:3)
你的例子是不可复制的,所以我必须自己创建一些:
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