簡體   English   中英

使用Apply函數代替for循環

[英]Using Apply functions instead of for loops

我有一個由59列組成的數據集,第4列至第59列包含電子郵件地址和廢話的混合物,我想創建一個向量(最終將進入數據框),該向量從第4:59列中提取唯一的電子郵件地址。 下面是我的功能,該功能對於一列EMAIL0非常有效。 列是連續的,因此EMAIL0-EMAIL55

udf.Unique.Emails <- function (strcol, data)
{
 vector <- as.character()
 # For All columns with an email in the data set
 for(i in 1:length(data))
 {
 # Check All the items in the row per email
 if (grepl("@", strcol[i]))
   {
    vector <- unique(c(vector,strcol[i]))
   } 
 }
 return (vector)
}

test <- udf.Unique.Emails (foo$EMAIL0, foo.data) 

我希望在4:59以后的所有列上實現這一點,以產生一個單一列,有人可以使用apply系列為我指出正確的方向嗎?

感謝您的時間

###### UPDATE #####

由於問題中數據的敏感性,我無法提供太多細節。 以下是將數據稱為foo.data並將數據和列饋入函數的模型

對於EMAIL0,該函數將返回foo@fpo.com

最終結果將是一個列,其中包含下面所有其他電子郵件列的所有唯一電子郵件

$ EMAIL0    (chr) "foo@fpo.com", "Recieved Report", "Daily", "Query", "Weekly", "Products", "Products2", "Results", "Products...
$ EMAIL1    (chr) "foo2@fpo2.com", "", "Nonsense", "", "", "garbage", "", "", "Trace Stack", "", "", "", "", "", "", "JS@fpo.com", "", "",...
$ EMAIL2    (chr) "John.Smith@fpo.com", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "John.Smith.Weston@fpo.com"

你可以試試:

data[which(matrix(grepl("@",as.matrix(data)),ncol=55),arr.ind=T)]

它基本上將獲取存在“ @”的索引,並返回這些索引處的值。

類似於這篇文章

暫無
暫無

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

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