- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这个简单的例子:
mytib <- tibble(city_name1 = c('nyc', 'DC'),
city_name2 = c('US', 'US'),
planet_name1 = c('earth', 'moon'),
planet_name2 = c('solar', 'solar'))
# A tibble: 2 x 4
city_name1 city_name2 planet_name1 planet_name2
<chr> <chr> <chr> <chr>
1 nyc US earth solar
2 DC US moon solar
我正在尝试自动创建一些使用
tidyr
的简单变量。 .具体来说,我只是简单地添加了两个字符变量
_name1
和
_name2
对于每个主题。如下:
> mytib %>%
+ tidyr::unite(complete_city,
+ c('city_name1', 'city_name2'), remove = FALSE) %>%
+ tidyr::unite(complete_planet,
+ c('planet_name1', 'planet_name2'), remove = FALSE)
# A tibble: 2 x 6
complete_city city_name1 city_name2 complete_planet planet_name1 planet_name2
<chr> <chr> <chr> <chr> <chr> <chr>
1 nyc_US nyc US earth_solar earth solar
2 DC_US DC US moon_solar moon solar
问题是我想自动化这个。也就是说,循环主题
city
和
planet
.我怎样才能做到这一点?我尝试了以下但没有成功:
for(topic in c('city', 'planet')){
mytib <- mytib %>%
tidyr::unite('complete_{{topic}}',
c('{{topic}}_name1', '{{topic}}_name2'), remove = FALSE)
}
谢谢!
最佳答案
我们可以将自定义函数与 purrr::reduce()
一起使用:
library(dplyr)
library(tidyr)
library(purrr)
mytib <- tibble(city_name1 = c('nyc', 'DC'),
city_name2 = c('US', 'US'),
planet_name1 = c('earth', 'moon'),
planet_name2 = c('solar', 'solar'))
myunite <- function(df, x) {
tidyr::unite(df, !! paste0("complete_", x),
paste0(x, "_name", 1:2),
# alternatively: starts_with(x),
remove = FALSE)
}
mytib %>%
reduce(c("planet", "city"), myunite, .init = .)
#> # A tibble: 2 x 6
#> complete_city city_name1 city_name2 complete_planet planet_name1 planet_name2
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 nyc_US nyc US earth_solar earth solar
#> 2 DC_US DC US moon_solar moon solar
创建于 2021-01-29 由
reprex package (v0.3.0)
dplyr::across()
而不是
tidyr::unite
.
mytib %>%
rename_with(~ gsub("1$", "", .)) %>%
mutate(across(matches("_[A-z]*$"),
~ str_c(get(cur_column()),"_",get(str_c(cur_column(), 2))),
.names = "complete_{col}"))
#> # A tibble: 2 x 6
#> city_name city_name2 planet_name planet_name2 complete_city_n~
#> <chr> <chr> <chr> <chr> <chr>
#> 1 nyc US earth solar nyc_US
#> 2 DC US moon solar DC_US
#> # ... with 1 more variable: complete_planet_name <chr>
创建于 2021-01-29 由
reprex package (v0.3.0)
关于r - 如何使用 tidyr 自动创建变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65957779/
我正在为网络元分析准备数据,但在输入列时遇到困难。 如果我有这个初始数据集: Study Trt y sd n 1 1 -1.22 3.70 54 1
这个问题在这里已经有了答案: How do I get a contingency table? (6 个回答) Faster ways to calculate frequencies and ca
我有一个看起来像这样的数据集 site % unite(D01, D01_1, D01_2, sep = "/", remove = TRUE) %>% unite(D02, D02_1, D
我有以下数据: > data data unique grouping value 1 1 a 15 2 2
我注意到了 tidyr(0.4.0)使用 spread 时对值列进行排序,如 tidyr(0.3.1)按照它们在 gather 之前的顺序返回值列. 可重现的示例 1: library(dplyr)
我正在学习 dplyr,来自 plyr,我想从 xtabs 的输出生成(每组)列(每交互)。 简短摘要:我得到 A B 1 NA NA 2 当我想要 A B 1 2 xta
我有一个 data.frame,其中一些单元格包含逗号分隔值的字符串: d % separate_rows(b) %>% separate_rows(c) # a b c # 1
Tidy eval now supports glue strings 所以这很好用: my_summarise5 % mutate( "mean_{{mean_var}}" :=
我有看起来像这样的数据 df = data.frame(name=c("A","A","B","B"), group=c("g1","g2","g1","g2"),
我有一个面板结构的数据框:两年内每个单元的 2 个观察值: library(tidyr) mydf % spread(year, value) %>% filter(2012 > 0.5) 以下工作但
我正在尝试使用 tidyr 包中的 extract 将包含单个字符串的列拆分为 3 个单独的列。该问题的最小工作示例如下: # A tibble: 3 x 1 question_codes
我在 R 中有以下数据框 my_df_test my_df_test V1 V2 V3 V4 V5 V6_S1 V6_S2 V7_S1 V7_S2 1 1 A S1
我有一个看起来像这样的数据框。我将其命名为“df_raw”。 "HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15" "HRMONTH\t2\tMONT
我搜了又搜,找到了类似的东西,但没有什么是对的。希望这个问题没有得到解答。 假设我有一个包含 Y、N 的列,有时还有额外的信息 df%separate('Surgery',c("Surgery
我想使用 tidyr 将数据分布在多个列上。 dat % gather(variable, value, -(ID:col1)) %>% unite(temp, col1, variab
tidyr 的扩展函数仅接受不带引号的列名。有没有办法可以传递包含列名的变量例如 # example using gather() library("tidyr") dummy.data % gath
我的问题类似于 this question .我正在尝试 tidyr::gather多列。但是,链接中提供的解决方案并不理想,因为所有列中的属性通常不相同,因此它们被删除。 请注意,我知道如何使用基础
我在 R 中有以下数据框 my_df_test my_df_test V1 V2 V3 V4 V5 V6_S1 V6_S2 V7_S1 V7_S2 1 1 A S1
我有一个看起来像这样的数据框。我将其命名为“df_raw”。 "HRHHID\t15\tHOUSEHOLD IDENTIFIER\t(Part 1)\t1- 15" "HRMONTH\t2\tMONT
这个问题在这里已经有了答案: Reshaping data.frame from wide to long format (8 个答案) 关闭 2 年前。 我正在尝试学习如何使用 tidyr 将宽数
我是一名优秀的程序员,十分优秀!