【问题标题】:How to create a new column conditioned on the occurrences of two other columns in R using dplyr?如何使用 dplyr 创建一个以 R 中其他两个列的出现为条件的新列?
【发布时间】:2020-11-09 17:36:19
【问题描述】:

我想创建一个country_year 变量,它以国家和年份的出现为条件,如下面我创建的这个小子样本所示。这意味着如果我有 3 个不同年份的 2 个国家/地区,则新的 country_year 变量将具有 country1_year1country1_year2 等值。

看起来很简单,但我是 R 新手,并试图寻找针对它的不同问题,但没有成功。有人可以指导我一下吗?

structure(list(id = structure(c(1, 1, 1, 2, 2, 2), format.stata = "%9.0g"), 
    country = structure(c("US", "US", "US", "UK", "UK", "UK"), format.stata = "%9s"), 
    year = structure(c(2003, 2004, 2005, 2003, 2004, 2005), format.stata = "%9.0g"), 
    country_year = structure(c(1, 2, 3, 4, 5, 6), format.stata = "%9.0g")), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

【问题讨论】:

  • 你看起来很新,所以欢迎来到 SO!请尝试使用您提供的示例数据和到目前为止您尝试过的一些代码添加所需的结果。

标签: r dplyr tidyverse


【解决方案1】:

您似乎想要创建一个新变量country_year

使用base R:

df$country_year <- paste0(df$country, "_", df$year)

使用dplyr:

library(dplyr)

df %>% 
  mutate(country_year = paste0(country,"_",year))

这给了我们:

     id country  year country_year
  <dbl> <chr>   <dbl> <chr>       
1     1 US       2003 US_2003     
2     1 US       2004 US_2004     
3     1 US       2005 US_2005     
4     2 UK       2003 UK_2003     
5     2 UK       2004 UK_2004     
6     2 UK       2005 UK_2005     

【讨论】:

  • 我认为不分组也可以。
【解决方案2】:

tidyverse 的选项是

library(dplyr)
library(tidyr)
df %>%
     unite(country_year, country, year, sep="_", remove = FALSE)

-输出

# A tibble: 6 x 4
#     id country_year country  year
#  <dbl> <chr>        <chr>   <dbl>
#1     1 US_2003      US       2003
#2     1 US_2004      US       2004
#3     1 US_2005      US       2005
#4     2 UK_2003      UK       2003
#5     2 UK_2004      UK       2004
#6     2 UK_2005      UK       2005

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 2012-08-24
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2019-11-29
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多