R 将唯一值从一列复制到另一列
我最近开始使用R,虽然我有一本手册,但我一直发现在那里找不到我需要的功能。这是我偶然发现的一个问题 我的数据如下所示:R 将唯一值从一列复制到另一列,r,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意味着该用户访问了我
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中:如果在col3中我有一个URL,在col2中我有NA,那么带有col3中URL的单元格需要复制到col2。如果col3和col2都有URL,那么我不希望在那里发生任何事情。如果col3有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
现在,我到处找,甚至在这个网站上也找不到任何关于使用“如果”条件将数据从一列复制到另一列的信息。我发现的唯一一件事是如何使用“merge”函数将整个列从一个数据帧复制到另一个数据帧,但除此之外,没有其他方法
是否存在可以实现此功能的函数?您的示例不可复制,因此我必须创建一些自己的:
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
你忘了添加语言标签[r],这将使有人几乎不可能回答你的问题。嗨,保罗。首先感谢您告诉我关于标记R语言的内容,从现在起,我们将牢记这一点:)。我试过你的方法,但似乎对我不起作用。出于某种原因,它将源列中的值替换为随机数。我怎样才能像你一样抓取R输出的屏幕,这样我就可以给你看这个了?David问题可能是您案例中的
source
列是一个因子
。请使用as.character
将其转换为character
列。我把这个编辑成了我的答案,解决了这个问题。再次非常感谢你的帮助,我非常感激。如果你喜欢挑战,我可能很快会给你另一个祝大卫·罗杰斯一切顺利。PS:这是关于将URL分解成更小的部分,并从中仅获取特定的信息,有点像excel中的“文本到列”。我会很快写出完整的例子。如果你认为这回答了你的问题,请按绿色的勾号。这表明每个人都在问这个问题。
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