Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将唯一值从一列复制到另一列_R - Fatal编程技术网

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意味着该用户访问了我

我最近开始使用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中:如果在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