我试图在dplyr::case_when内部dplyr::mutate创建一个新变量,我将一些值设置为缺失并同时重新编码其他值.
但是,如果我尝试将值设置为NA,则会收到错误消息,指出我们无法创建变量,new因为NAs是合乎逻辑的:
mutate_impl(.data,dots)
出错:评估错误:必须是double类型,不是逻辑.
有没有办法NA使用此方法在数据框中的非逻辑向量中设置值?
library(dplyr)
# Create data
df <- data.frame(old = 1:3)
# Create new variable
df <- df %>% dplyr::mutate(new = dplyr::case_when(old == 1 ~ 5,
old == 2 ~ NA,
TRUE ~ old))
# Desired output
c(5, NA, 3)
Run Code Online (Sandbox Code Playgroud) 我试图在R中直接向下移动一个文件夹.例如,我有一个foo/bar的工作目录,我想移动到foo/bar /子文件夹:
setwd("/Users/foo/bar")
getwd()
[1] "/Users/foo/bar"
setwd("~/subfolder")
Run Code Online (Sandbox Code Playgroud)
然后我收到:
setwd中的错误("〜/ subfolder"):无法更改工作目录
我究竟做错了什么?
我安装了R,RStudio和devtools(下面省略了一些输出)并进行了更新。我还安装了Rtools的最新版本:
# Check R version
R.Version()
$platform
[1] "x86_64-w64-mingw32"
# OUTPUT OMITTED
$version.string
[1] "R version 3.4.3 (2017-11-30)"
# Check devtools for Rtools installation
devtools::find_rtools()
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
但是,当我按Ctrl + Shift + B在RStudio中构建软件包时,会通知我找不到Rtools:
==> devtools::build()
"C:/PROGRA~1/R/R-34~1.3/bin/x64/R" --no-site-file --no-environ --no-save \
--no-restore --quiet CMD build \
"C:\Users\name\mypkg" --no-resave-data \
--no-manual
* checking for file
'C:\Users\name/mypkg/DESCRIPTION' ... OK
* preparing 'mypkg':
* checking DESCRIPTION meta-information ... OK
* checking for LF line-endings in source and make files and shell scripts
* checking for …Run Code Online (Sandbox Code Playgroud) 我之前在 RStudio 中打开了 packrat()。我现在希望完全删除并禁用它(即恢复到安装 Packrat 之前的状态)。我试图在 Rstudio 中找到一个选项来禁用它,但找不到任何东西。因此,我通过(在 OSX 10.9.5 上)将 R 和 RStudio 的图标从应用程序文件夹拖到垃圾桶来卸载 R 和 RStudio。但是,重新安装 R(版本 3.2.3)后,R 控制台显示以下消息并弹出窗口提示我选择 CRAN 镜像:
Packrat 未安装在本地库中 -- 正在尝试引导安装...本地没有可用的 Packrat 源代码包 --- 请选择一个 CRAN 镜像用于本次会话 ---
因此,我在 Library 中找到了一个名为“packrat”的文件夹。删除此内容后,我现在在启动 R 时收到以下信息:
文件错误(文件名,“r”,编码=编码):
无法打开连接
另外:警告消息:
在文件(文件名,“r”,编码=编码)中:无法打开文件“packrat/init.R”:没有这样的文件或目录
这与以下内容中发现的错误相同:Trouble with packrat Corrupting R Functioning but no .Rprofile or .Rhistory files are found when I search in Finder 并且我不知道要手动搜索哪个工作目录。有人可以建议如何实施上面链接的解决方案吗?
我的理解是 dplyr::bind_rows() 仅对数据帧进行操作。为什么下面两个是相同的?
# Load pkgs, set seed
library(dplyr)
set.seed(1)
# Create toy data
foo <- list(df1 = data.frame(A = rnorm(3), B = rnorm(3)),
df2 = data.frame(C = rnorm(3), B = rnorm(3)),
df3 = data.frame(C = rnorm(3), A = rnorm(3)))
df1 <- bind_rows(foo)
# Combine all sources into 1 source
for (i in 1:(length(foo) - 1)){
foo[[i+1]] <- dplyr::bind_rows(foo[[i]], foo[[i+1]])
}
# Extract final df from list
df2 <- foo[[length(foo)]]
# Check for identical
identical(df1, df2)
Run Code Online (Sandbox Code Playgroud) 我试图通过用零填充任何少于 10 个字符的数字来创建 10 个字符的字符串。我已经能够使用少于 10 个字符来执行此操作,但下面的代码会导致形成一个 10 个字符的字符串,并且开头带有空格。如何将主角设为 0?
# Current code
foo <- c("0","999G","0123456789","123456789", "S")
bar <- sprintf("%10s",foo)
bar
# Desired:
c("0000000000","000000999G","0123456789", "0123456789", "00000000S)
Run Code Online (Sandbox Code Playgroud) 我已多次查看文档dplyr,它表明这dplyr::rename_all是一个"范围"变体dplyr::rename.有人能解释一下这对语法和功能有什么影响吗?为什么使用一个与另一个?该文档dplyr尚不清楚.
我正在尝试使用语法更改数据框中列子集的类型dplyr,其中列子集由包含我要操作的列名称的字符向量标识。由于我同时处理多个列,因此我使用across(). 由于我传递的是外部名称向量,因此我使用all_of(). 但是,在实际执行此操作时,我收到以下错误。
错误:
mutate()输入有问题..2。x 输入..2必须是向量,而不是原始函数。我的输入..2是as.character.
下面是重现该错误的示例。
library(dplyr)
# Create example data
df <- data.frame(x = rnorm(10),
y = rnorm(10))
cols_to_convert <- c("x","y")
df %>% mutate(across(all_of(cols_to_convert)),
as.character)
Run Code Online (Sandbox Code Playgroud) 我正在尝试生成辅助轴刻度标签,其颜色与 ggplot 中的主刻度标签颜色不同。
我有一个包含两组线和相应的不同 y 轴的图。正如下面的最小示例所示,我成功地使每条线+轴标签对共享共同的颜色,以将它们与另一对区分开来。但是,我希望刻度标签也共享这些颜色。
直观的方法是使用 sec.axis 和 sec_axis,但它们似乎没有提供一种方法来区分辅助轴的刻度/标签的格式与主轴的刻度/标签的格式。
有人有办法改变辅助轴刻度标签的颜色而不改变主轴的颜色吗?
library(ggplot2)
# Example data
df <- data.frame(y1 = 1:10,
y2 = 2:11,
x = 101:110)
# Example plot
df %>% ggplot2::ggplot() +
geom_line(
mapping = aes(x = x, y = y1),
color = "black") +
geom_point(
mapping = aes(x = x, y = y1),
color = "black") +
geom_line(
mapping = aes(x = x, y = y2),
color = "red") +
geom_point(
mapping = aes(x = x, y = …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多列的数据框。列的类型不同:有些是数字,有些是字符等。这是一个小例子,我们只有 3 个变量,有 2 种类型:
# Generate data
dat <- data.frame(x = c("1","2","3"),
y = c(1.0,2.5,3.3),
z = c(1,2,3),
stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
我想用空格替换值 3,但仅用于字符列。这是我当前的代码:
out <- as.data.frame(lapply(dat, function(x) {
ifelse(is.character(x),
gsub("3", " ", x),
x)}),
stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
问题是 ifelse() 函数忽略了 y 和 z 是数字,而且它似乎也将数字变量强制转换为字符。
想法是拉出字符列, gsub() 它们,然后将它们绑定回原始数据框。但是,这会更改列的顺序。任何解决方案的关键是我不需要按名称指定变量,而只需按类型指定。
我正在尝试使用ggridges包创建一个joyplot (基于ggplot2).一般的想法是,一个joyplot创建了精确缩放的堆积密度图.但是,我似乎无法使用加权密度生成其中一个.是否有一些方法可以在计算密钥套的创建中计算密度时采用抽样权重(加权密度)?
这里是该ggridges软件包文档的链接:https://cran.r-project.org/web/packages/ggridges/ggridges.pdf我知道很多基于ggplot的软件包可以接受额外的美学,但我不知道知道如何为这种类型的geom添加权重.
另外,这是ggplot中未加权的joyplot的示例.我试图将其转换为加权图,密度根据pweight加权.
# Load package, set seed
library(ggplot)
set.seed(1)
# Create an example dataset
dat <- data.frame(group = c(rep("A",100), rep("B",100)),
pweight = runif(200),
val = runif(200))
# Create an example of an unweighted joyplot
ggplot(dat, aes(x = val, y = group)) + geom_density_ridges(scale= 0.95)
Run Code Online (Sandbox Code Playgroud)