首页 > 解决方案 > R - 基于在 df 中搜索向量元素创建新列

问题描述

我想向 df 添加列,其中新添加的列是基于在 df 的现有列中搜索向量的值。

我的原始数据集包含网络数据,其中行代表每个客户访问的页面;访问的页面存储在 df$URL 中。我有一个单独的网页 URL 向量,该向量中的每个元素都需要添加为一列,其值指示原始 df (df$URL) 中客户的页面访问是否与要添加的列匹配 (=vector 元素)。

基本上:我想为向量的每个元素(其中列名=向量元素)创建一个列,其值(0/1)基于搜索 df 的 URL 列的行以在匹配项上添加 1,或者否则为 0。

urlnames 中的所有向量元素都出现在 df$URL 中(但不是针对每一行),但 df$URL 包含的 URL 比向量中的多(基本上,向量仅包含一些访问次数最多的 URL 页面)。

urlnames <- c("/home", "/login", "/contact")

df <- data.frame("URL" = c("/home", "/login", "/contact", "/chat", "/product-page"))

手动我会做类似的事情(使用 dplyr):

df %<>%
  mutate(home = ifelse(URL == "/home", 1, 0))

基本上,变量名称和 ifelse 标准应该替换为向量元素。我不知道是否有更有效/更简洁的方法来做到这一点。

我真的很想学习如何自动执行这些操作,而不必对每个变量进行手动变异调用。

(顺便说一句,我也希望输入 url 斜杠在创建列名时可能产生的潜在问题,例如 /home 作为变量)

希望我已经足够清楚地解释我的问题,如果没有道歉 - 这是我的第一篇文章,我(显然)是 R 的新手。谢谢!

标签: rdataframevectordplyr

解决方案


尝试table

table(1:nrow(df),df$URL)

#    /chat /contact /home /login /product-page
#  1     0        0     1      0             0
#  2     0        0     0      1             0
#  3     0        1     0      0             0
#  4     1        0     0      0             0
#  5     0        0     0      0             1

您可以在之后删除不需要的列,并data.frame在需要时强制转换为 a。

有很多方法可以删除列。一种是使用与 withreplace不同的值并重新应用上述值。就像是:urlnamesNA

table(1:nrow(df),droplevels(replace(df$URL,which(!df$URL %in% urlnames),NA)))

推荐阅读