我有一些看起来像这样的数据:
Year Revenue Cost Rent
1 2016 3000 4 100
2 2017 4000 5 100
3 2018 5000 6 100
df <- data.frame(stringsAsFactors=FALSE,
Year = c(2016L, 2017L, 2018L),
Revenue = c(3000L, 4000L, 5000L),
Cost = c(4L, 5L, 6L),
Rent = c(100L, 100L, 100L)
)
Run Code Online (Sandbox Code Playgroud)
我想将所有内容分成以下百分比Rent:
library(dplyr)
df <- df %>% mutate_at(vars(Revenue:Rent), funs(. /Rent))
Run Code Online (Sandbox Code Playgroud)
这完美地工作。
Year Revenue Cost Rent
1 2016 30 0.04 1
2 2017 40 0.05 1
3 2018 50 0.06 1
Run Code Online (Sandbox Code Playgroud)
唯一的事情:我丢失了我原来的专栏。
我该如何做mutate_all, 以便我有新的列,比如说叫做 …
我正在使用 R 包stargazer创建高质量的回归表,我想用它来创建汇总统计表。我的数据中有一个因子变量,我希望汇总表显示因子在每个类别中的百分比——实际上,将因子分成一组互斥的逻辑(虚拟)变量,然后显示表中的那些。下面是一个例子:
> library(car)
> library(stargazer)
> data(Blackmore)
> stargazer(Blackmore[, c("age", "exercise", "group")], type = "text")
==========================================
Statistic N Mean St. Dev. Min Max
------------------------------------------
age 945 11.442 2.766 8.000 17.920
exercise 945 2.531 3.495 0.000 29.960
------------------------------------------
Run Code Online (Sandbox Code Playgroud)
但我试图获得一个额外的行,显示每组中的百分比(在这些数据中,% 控制和/或 % 患者)。我确定这只是观星者某个地方的一个选项,但我找不到它。有谁知道它是什么?
编辑:car::Blackmoor已将拼写更新为car::Blackmore.
我的数据如下所示:
#> Artist Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
Run Code Online (Sandbox Code Playgroud)
我的问题应该很简单。我试图只使用rename_if以字母“A”开头的列作为前缀。所以我想要的输出是:
#> df1_Artist df1_Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
Run Code Online (Sandbox Code Playgroud)
您可以看到不应以“年份”为前缀。
这是我的尝试,但效果不佳。我使用starts_with不正确吗?我应该试着把它分成两行,这样我才能更清楚地理解它吗?我还在学习 purrr 风格的函数,所以它对我来说并不总是很直观。
df1 %>% rename_if(starts_with("A"), .funs = ~ paste0(df1, .))
#> Error in df1 %>% rename_if(starts_with("A"), .funs = ~paste0(df1, .)): could not find function "%>%"
Run Code Online (Sandbox Code Playgroud)
数据输入代码:
df1 <- data.frame(stringsAsFactors=FALSE,
Artist = c("Beatles", "Rolling Stones"),
Album = c("Sgt. Pepper's", …Run Code Online (Sandbox Code Playgroud) 我的数据采用以下格式:
library(tidyverse)
df <- mtcars
df <- df %>% mutate(vs_doubled = vs * 2) %>% select(mpg, cyl, vs, am, vs_doubled)
head(df)
#> mpg cyl vs am vs_doubled
#> 1 21.0 6 0 1 0
#> 2 21.0 6 0 1 0
#> 3 22.8 4 1 1 2
#> 4 21.4 6 1 0 2
#> 5 18.7 8 0 0 0
#> 6 18.1 6 1 0 2
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用0 mutate_at并将na_if其设置为NA,但仅用于特定列(“ vs”和“ am”)。我想在列“ vs_doubled”中保留零。
我不太正确,因为以下行不起作用:
df <- …Run Code Online (Sandbox Code Playgroud) 我想使用读取目录中的所有 *.csv 文件purrr::map,我只是想问是否有比我正在做的更好的方法,特别是如果它来自 tidyverse 或更容易阅读。
特别是,你会使用file.path()? 有没有更简单的方法,或者更容易阅读的方法?
图书馆(tidyverse)
csv_filenames <- list.files(path = "raw_data/")
dfs <- map(csv_filenames, ~read_csv(file.path("raw_data/", .)))
df <- 绑定行(dfs)
我正在尝试:(1) 估计多个模型,其中只有因变量发生变化 (2) 使用 Stargazer 包将结果制表
以下代码有效,但我必须为每个模型重复一行代码:
library(stargazer)
data(mtcars)
reg1 <- lm(mpg ~ am + gear + carb, data=mtcars)
reg2 <- lm(cyl ~ am + gear + carb, data=mtcars)
reg3 <- lm(disp ~ am + gear + carb, data=mtcars)
stargazer(reg1, reg2, reg3,
title="Regression Results", type="text",
df=FALSE, digits=3)
Run Code Online (Sandbox Code Playgroud)
您可以看到(修剪后的)输出具有正确的因变量标题(mpg、cyl、disp):
Regression Results
==================================================
Dependent variable:
------------------------------
mpg cyl disp
(1) (2) (3)
--------------------------------------------------
am 3.545* -0.176 -40.223
(1.897) (0.615) (48.081)
Run Code Online (Sandbox Code Playgroud)
如果我使用 lapply 和 paste,它最终会改变 stargazer 中因变量的标题:
dependents <- c('mpg', 'cyl', …Run Code Online (Sandbox Code Playgroud) 我想获取一些列的日志,并创建所有名为log [原始列名]的新列.
下面的代码有效,但是如何将调用的columnstolog变量传递给mutate?谢谢.
library(dplyr)
data(mtcars)
columnstolog <- c('mpg', 'cyl', 'disp', 'hp')
mtcars %>% mutate(logmpg = log(mpg))
mtcars %>% mutate(logcyl = log(cyl))
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数,该函数迭代(或使用purrr::map())因子的每个级别,并lm()为因子等于该级别的数据子集拟合模型。
要使用 制作一个简单的可重现示例mtcars,只需说我想要lm为每个值使用不同的模型mtcars$gear。我首先将其作为一个因素,因为我真正的问题涉及通过一个因素进行迭代:
library(tidyverse)
mtcars <- mtcars %>%
mutate(factor_gear = factor(gear))
Run Code Online (Sandbox Code Playgroud)
我希望该功能适合各个级别的factor_gear. 级别由下式给出:
levels(mtcars$factor_gear)
Run Code Online (Sandbox Code Playgroud)
IE
[1] "3" "4" "5"
Run Code Online (Sandbox Code Playgroud)
所以我想要的输出是:
fit1 <- lm(mpg ~ cyl, data = mtcars %>% filter(factor_gear=="3"))
fit2 <- lm(mpg ~ cyl, data = mtcars %>% filter(factor_gear=="4"))
fit3 <- lm(mpg ~ cyl, data = mtcars %>% filter(factor_gear=="5"))
fits <- list(fit1, fit2, fit3)
Run Code Online (Sandbox Code Playgroud)
我已经开始使用该功能,但无法使其正常工作。
我认为一个函数应该:
fit_each_level <- function(factor_variable) {
# trying to: …Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题,我希望能够使用purrr::map()它。
我有一个命名项目列表(此示例使用mtcars数据集):
var_labels <- list(cyl = "气缸数",
disp =“位移”)
我可以打印所有chr列表项(打印是我真正问题的简化):
print_label <- 函数(x){
打印(x)
}
地图(var_labels,打印_标签)
这使:
>[1]“气缸数” >[1]“位移” >$缸 >[1]“气缸数” > >$显示 >[1]“位移”
但我似乎无法打印列表项及其名称:
print_item_and_name <- 函数(x){
打印(x)
打印(名称(x))
}
地图(var_labels,print_item_and_name)
这给了我 NULL:
>[1]“气缸数” >空 >[1]“位移” >空 >$缸 >空 >$显示 >空
我真正的问题不仅仅是打印项目及其名称,但我怀疑如果我能找到这个简化步骤的解决方案,我应该能够解决我的真正问题。
期望的输出是:
>[1]“气缸数”
> “圆柱”
>[1]“位移”
“显示”
我想更改从shap库生成的绘图的纵横比。
下面的最小可重复示例图:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
import shap
boston = load_boston()
regr = pd.DataFrame(boston.data)
regr.columns = boston.feature_names
regr['MEDV'] = boston.target
X = regr.drop('MEDV', axis = 1)
Y = regr['MEDV']
fit = LinearRegression().fit(X, Y)
explainer = shap.LinearExplainer(fit, X, feature_dependence = 'independent')
shap_values = explainer.shap_values(X)
shap.summary_plot(shap_values, X)
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法保存该图:
fig = shap.summary_plot(shap_values, X, show = False)
plt.savefig('fig_tes1.svg', bbox_inches='tight',dpi=100)
Run Code Online (Sandbox Code Playgroud)
但我无法更改纵横比,例如将其宽度与高度设为 4:3。
我读到我应该能够
plt.gcf()
Run Code Online (Sandbox Code Playgroud)
但对我来说,这只是创建了一个新的空白情节。
<Figure size …Run Code Online (Sandbox Code Playgroud) 我将lm()模型的公式存储为chr变量,并尝试将公式中的所有变量提取到向量中。
为了使其可复制,使用mtcars变量:mpg, cyl, 和drat(并且我的公式在示例中具有转换等)
model_string <- "mpg ~ cyl + I(abs(0.5-drat)) + I((0.5 - drat)^2)"
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
vars_used <- c("mpg", "cyl", "drat")
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所做的是:
library(tidyverse)
vars_used <- model_string %>%
str_extract_all(pattern = "\\w+") %>%
pluck(1) %>%
str_remove_all(pattern = "[0-9]")
vars_used
Run Code Online (Sandbox Code Playgroud)
[1] "mpg" "cyl" "I" "abs" "" "" "drat" "I" "" "" "drat" ""
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来完成我想要做的事情,特别是使用 tidytext?
我仍然需要删除向量中的空字符串,并删除重复项。
我希望能够filter(),其中参数值是已经定义的变量。
因此,例如,使用可重现的mtcars数据集:
library(tidyverse)
df <- mtcars
head(df)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#> Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#> Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 …Run Code Online (Sandbox Code Playgroud)