基于更高的行对新行进行变异。尝试使用dplyr::mutate之类的东西,但要跨行使用
我有一个小数据框:基于更高的行对新行进行变异。尝试使用dplyr::mutate之类的东西,但要跨行使用,r,R,我有一个小数据框: ga_sessions_combined <- structure(list(Metric = c("Users", "Bounces", "Transactions", "Revenue"), ym_201904 = c(5813, 2124, 193, 24923.155206), ym_201905 = c(7094, 2445, 257, 40361.46), ym_201906 = c(5647, 2049, 181, 26314.32 ), ym_201
ga_sessions_combined <- structure(list(Metric = c("Users", "Bounces", "Transactions",
"Revenue"), ym_201904 = c(5813, 2124, 193, 24923.155206), ym_201905 = c(7094,
2445, 257, 40361.46), ym_201906 = c(5647, 2049, 181, 26314.32
), ym_201907 = c(5553, 1864, 144, 23678.14), ym_201908 = c(5392,
1811, 116, 16893.6), ym_201909 = c(5160, 1933, 121, 23635.754179
), ym_201910 = c(7504, 2381, 187, 34052.48), ym_201911 = c(23808,
4661, 1421, 285310.131623), ym_201912 = c(33244, 8332, 3259,
596214.021099), ym_202001 = c(8460, 2987, 233, 38663.293857),
ym_202002 = c(7463, 1510, 212, 37170.53), ym_202003 = c(9069,
2103, 295, 47716.45)), .Names = c("Metric", "ym_201904",
"ym_201905", "ym_201906", "ym_201907", "ym_201908", "ym_201909",
"ym_201910", "ym_201911", "ym_201912", "ym_202001", "ym_202002",
"ym_202003"), row.names = c(NA, -4L), class = c("tbl_df", "tbl",
"data.frame"))
看起来像这样:
ga_sessions_combined
# A tibble: 4 x 13
Metric ym_201904 ym_201905 ym_201906 ym_201907 ym_201908 ym_201909 ym_201910 ym_201911 ym_201912 ym_202001 ym_202002
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Users 5813 7094 5647 5553 5392 5160 7504 23808 33244 8460 7463
2 Bounc… 2124 2445 2049 1864 1811 1933 2381 4661 8332 2987 1510
3 Trans… 193 257 181 144 116 121 187 1421 3259 233 212
4 Reven… 24923. 40361. 26314. 23678. 16894. 23636. 34052. 285310. 596214. 38663. 37171.
我想添加一个新行“ConversionRate”,其中列度量值为“ConversionRate”,值为Transactions rows 3/Users row 1
几乎类似于dplyr,但会跨行而不是跨列进行变异。如何做到这一点?这里有一个选项,我们过滤“指标”为“交易”或“用户”的行,然后使用Summary_all分割行,并在将“指标”创建为“转换率”后将其与原始数据集绑定
library(dplyr)
ga_sessions_combined %>%
filter(Metric %in% c("Transactions", "Users")) %>%
select(-1) %>%
summarise_all(~ last(.)/first(.)) %>%
bind_cols(Metric = 'ConversionRate', .) %>%
bind_rows(ga_sessions_combined, .)
或者另一个选项是从TIBLE添加_行,创建一个新行,将“Metric”作为“ConversionRate”,并通过分割特定行来替换最后一行数字列中的NA
library(tibble)
ga_sessions_combined %>%
add_row(Metric = 'ConversionRate') %>%
mutate_if(is.numeric,
~ replace(., n(), .[Metric == 'Transactions']/.[Metric == 'Users']))
这里有一个选项,我们过滤“度量”为“事务”或“用户”的行,然后使用summary_all分割行,并在将“度量”创建为“转换率”后将其与原始数据集绑定
library(dplyr)
ga_sessions_combined %>%
filter(Metric %in% c("Transactions", "Users")) %>%
select(-1) %>%
summarise_all(~ last(.)/first(.)) %>%
bind_cols(Metric = 'ConversionRate', .) %>%
bind_rows(ga_sessions_combined, .)
或者另一个选项是从TIBLE添加_行,创建一个新行,将“Metric”作为“ConversionRate”,并通过分割特定行来替换最后一行数字列中的NA
library(tibble)
ga_sessions_combined %>%
add_row(Metric = 'ConversionRate') %>%
mutate_if(is.numeric,
~ replace(., n(), .[Metric == 'Transactions']/.[Metric == 'Users']))
在base R中,我们可以使用rbind/cbind,如:
在base R中,我们可以使用rbind/cbind,如:
嗨,谢谢。这就得到了我需要的结果。阅读帮助的最后和第一,但我不明白。。。在通俗英语中,last and first在本文中是否指第一行上的最后一行?@DougFir在筛选步骤之后,只剩下两行。但“事务”行是最后一行或第二行。行与原始顺序中的“用户”进行比较。所以,我用了第一个和最后一个。相反,你也可以做1和2。作为索引或甚至不进行筛选,请在摘要中进行此操作。使用==~.[Metric=='Transactions']/[Metric=='Users'],在这里更容易。为了理解,谢谢。这就得到了我需要的结果。阅读帮助的最后和第一,但我不明白。。。在通俗英语中,last and first在本文中是否指第一行上的最后一行?@DougFir在筛选步骤之后,只剩下两行。但“事务”行是最后一行或第二行。行与原始顺序中的“用户”进行比较。所以,我用了第一个和最后一个。相反,你也可以做1和2。作为索引或甚至不进行筛选,请在摘要中进行此操作。使用==~.[Metric=='Transactions']/[Metric=='Users'],在这里更容易。了解