我们正在处理面板数据,Stata 中有一个命令,xtsum它可以为您提供数据集中变量的内部方差和方差之间的信息。R 是否有类似的命令可以产生干净的输出?
我有一个汇总为数据透视表的数据框,我想添加一行,其中包含每个数字列的平均值,对于字符列,该行可以命名为“平均值”
示例数据框如下
dat <- c('2000-01-15','2003-01-15','2000-02-15',
'2003-02-15','2000-04-15','2002-04-15',
'2000-12-15','2002-12-15','2003-12-13', "2003-12-15",'2002-02-21','2002-01-25','2003-04-24')
df <- data.frame(date =as.Date(dat), id = c(1,2,3,4,5,6,7,8,9,10,11,12,13),
sales = c(134,211,2000,234,421,400,34,1233,1222,1034,8034,1234,2331))
df <- df %>%
mutate(year = format(date, "%Y"),
month = format(date, "%b")) %>% select(-date) %>%
group_by(year,month) %>%
summarise(revenue = sum(sales))
df2 <- df %>% pivot_wider(id_cols = year, names_from = month, values_from = revenue)
Run Code Online (Sandbox Code Playgroud)
从这里我想做
rbind(df2, summarise_all(df2, mean))
Run Code Online (Sandbox Code Playgroud)
然而,主要的复杂性在于如何仅返回数字列的平均值并返回非数字列的字符。
我想要的输出应该是
year Apr Dec Feb Jan
<chr> <dbl> <dbl> <dbl> <dbl>
1 2000 421 34 2000 134
2 2002 400 1233 8034 1234
3 …Run Code Online (Sandbox Code Playgroud) 如何过滤以 R 中的任何拉丁字母开头的所有行
示例代码不起作用
library(dplyr)
df <- data.frame( marks = c(20.1, 30.2, 40.3, 50.4, 60.5),
age = c(21:25),
roles = c('Software Eng.', 'Software Dev',
'Data Analyst', 'Data Eng.',
'5Sigma'))
df %>% filter(grep("[A-z]", roles))
Run Code Online (Sandbox Code Playgroud)
所需输出
marks age roles
1 20.1 21 Software Eng.
2 30.2 22 Software Dev
3 40.3 23 Data Analyst
4 50.4 24 Data Eng.
Run Code Online (Sandbox Code Playgroud) r ×3
dplyr ×2
dataframe ×1
panel-data ×1
pivot-table ×1
stata ×1
statistics ×1
stringr ×1
tidyverse ×1