【问题标题】:How to create a variable where the value is taken from another variable matching values of a vector如何创建一个变量,其中值取自与向量的值匹配的另一个变量
【发布时间】:2021-11-26 17:41:09
【问题描述】:

我有一个数据框,其中包含一个由产品名称字符串组成的变量。 例如:

| Names                       | Price ...|
|-----------------------------|----------|
| milk                        | ...      |
| pizza with tomato           | ...      |
| tuna with olive and beans   | ...      |
| etc...                      | ...      |

我想创建一个其他变量,该变量将存储在与变量Names中的名称匹配的向量中的名称作为值。

基本上,如果我有一个向量:

x <- c("milk", "pizza", "tuna")

代码应查看变量Names,如果在向量x 中找到匹配项,则获取该值并将其存储在名为tag 的新变量中,该变量应具有milk、@ 987654328@,tuna.

如果满足条件,是否可以创建一个其值取自另一个变量的变量?

【问题讨论】:

  • 请将第一个数据帧包含为 r 对象,就像您为 x 向量所做的那样,以使问题可重现。此外,如果您可以包含显示预期结果的数据框以及您尝试显示问题所在的任何代码,那将非常有帮助。

标签: r if-statement


【解决方案1】:

如果我的理解正确,您希望在数据框中的新列中有一个标签(如关键字)。如果是这样,那么使用str_extract 提取出现在搜索列表中的单词可能会更容易。

library(stringr)

search <- c("milk", "pizza", "tuna")    

df$tag <- stringr::str_extract(df$Names, paste(search, collapse="|"))

输出

                       Names price   tag
1                       milk  3.99  milk
2          pizza with tomato  5.99 pizza
3 tuna with olives and beans  9.99  tuna
4                       crab  4.99  <NA>

数据

df <-
  structure(list(
    Names = c("milk", "pizza with tomato", "tuna with olives and beans",
              "crab"),
    price = c(3.99, 5.99, 9.99, 4.99),
    tag = c("milk", "pizza",
            "tuna", NA)
  ),
  row.names = c(NA,-4L),
  class = "data.frame")

【讨论】:

  • 谢谢安德鲁,这解决了我的问题!我确实在我的部分脚本中使用了 str_extract 来润色我的数据框,但不知何故,我没想过像你那样使用它。 r 社区很棒。再次非常感谢您!
最近更新 更多