[英]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.