首页 > 解决方案 > 根据某些条件在 R 中创建新列

问题描述

所以我有一个数据集 df,它看起来像这样

Customer Spending($)
abc      10
abc      11
123      5
123      10
456      9
456      2

我想创建一个新列,将其命名为 <$20,它将返回支出总和小于 20 美元的客户的姓名,如果客户花费超过 20 美元,则返回空值。

我希望结果看起来像这样

Customer Spending($) <20
abc      10          null
abc      11          null
123      5           123
123      10          123
456      9           456
456      2           456

关于如何去做的任何想法?我觉得这应该是基本的,但我正在努力。谢谢!

标签: rif-statementsum

解决方案


尝试这个。您可以直接嵌入比较,预先清理Spending变量,并获得所需的值。这里的代码:

library(dplyr)
#Code
newdf <- df %>% group_by(Customer) %>%
  mutate(Var=ifelse(sum(as.numeric(gsub('$','',Spending,fixed = T)))>20,'null',Customer))

输出:

# A tibble: 6 x 3
# Groups:   Customer [3]
  Customer Spending Var  
  <chr>    <chr>    <chr>
1 abc      $10      null 
2 abc      $11      null 
3 123      $5       123  
4 123      $10      123  
5 456      $9       456  
6 456      $2       456  

使用的一些数据:

#Data
df <- structure(list(Customer = c("abc", "abc", "123", "123", "456", 
"456"), Spending = c("$10", "$11", "$5", "$10", "$9", "$2")), class = "data.frame", row.names = c(NA, 
-6L))

推荐阅读