我想按组对每一行进行简单的计算,但我需要引用满足某些条件的前一行。我想创建一个新变量,results. 对于每组中的每一行,我想找到上面最接近的行 wheretag == "Y"和codeis not NA。然后,我想使用value该行中的 ,并乘以当前行中的值。
最小的例子
df <- structure(list(name = c("apples", "apples", "apples", "apples",
"oranges", "oranges", "oranges", "oranges"),
id = 1:8,
tag = c("X", "Y", "Y", "X", "X", "Y", "X", "X"),
code = c(1, 1, NA, 1, NA, 1, NA, NA),
value = c(1, 11, 4, 3, 9, 5, 7, 8)),
class = "data.frame", row.names = c(NA, -8L))
name id tag code value
1 apples 1 X 1 …Run Code Online (Sandbox Code Playgroud) 我有两个相同大小的不同矩阵,一个有 NA 值,一个没有,例如:
mat=matrix(rnorm(9, mean=20, sd=10), nrow=3)
mat2=matrix(rnorm(9, mean=20, sd=10), nrow=3)
mat2[mat2<20]=NA
mat
[,1] [,2] [,3]
[1,] 21.67730 17.978427 17.24766
[2,] 14.71108 16.970846 30.29543
[3,] 28.65521 9.191494 18.83665
mat2
[,1] [,2] [,3]
[1,] 28.6093 NA 32.26887
[2,] NA NA NA
[3,] NA 20.19428 30.25038
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法识别 NA 值的坐标(行/列)mat2:
which(is.na(mat2), TRUE)
Run Code Online (Sandbox Code Playgroud)
然后我如何使用这些坐标来替换 中的相同mat值NA?生产:
mat
[,1] [,2] [,3]
[1,] 21.67730 NA 17.24766
[2,] NA NA NA
[3,] NA 9.191494 18.83665
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?提前致谢。
我正在编写自己的函数来计算数据集中列的平均值,然后使用它来应用它,apply()但它只返回第一列的平均值。下面是我的代码:
mymean <- function(cleaned_us){
column_total = sum(cleaned_us)
column_length = length(cleaned_us)
return (column_total/column_length)
}
Average_2 <- apply(numeric_clean_usnews,2,mymean,na.rm=T)
Run Code Online (Sandbox Code Playgroud) 我创建了一个 R Markdown 来检查一系列数据集中的错误(例如,给定列中是否有空格?如果有,则打印一条语句,说明存在 NA 以及哪些行具有 NA)。我已经设置 R Markdown 来输出bookdown::word_document2. 我有大约 100 个数据集,需要在其上运行相同的 R Markdown 并分别为每个数据集获取 Word 文档输出。
有没有办法在所有数据集上运行相同的 R Markdown 并为每个数据集获取一个新的 Word 文档(这样它们就不会被覆盖)?所有数据集都位于同一目录中。我知道每次编织文档时输出都会被覆盖;因此,我需要能够根据数据集/文件名保存每个word文档。
\n最小的例子
\n创建包含 3 个 .xlsx 文件的目录
\nlibrary(openxlsx)\n\nsetwd("~/Desktop")\ndir.create("data")\n\ndataset <-\n structure(\n list(\n name = c("Andrew", "Max", "Sylvia", NA, "1"),\n number = c(1, 2, 2, NA, NA),\n category = c("cool", "amazing",\n "wonderful", "okay", NA)\n ),\n class = "data.frame",\n row.names = c(NA,-5L)\n )\n\nwrite.xlsx(dataset, \'./data/test.xlsx\')\nwrite.xlsx(dataset, \'./data/dataset.xlsx\')\nwrite.xlsx(dataset, \'./data/another.xlsx\')\nRun Code Online (Sandbox Code Playgroud)\nRMarkdown
\n---\ntitle: Hello_World\nauthor: "Somebody"\noutput:\n bookdown::word_document2:\n fig_caption: …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的数据集,变量中包含重复的信息,当这种关系在 ID1、ID2 或 ID2、ID1(不同列中的那些)的意义上理解时,变量中的值也可以从不同的 ID 关系中重复。我想用反向 ID 顺序删除相同的信息,如下所示:
ID1 ID2 value
BHFUD13XG KLSIENAL1 0.3475
GLADKK123 FBNAFLEL2 0.2956
KLSIENAL1 BHFUD13XG 0.3475
FBNAFLEL2 GLADKK123 0.2956
DGFEORM23 SHDKG14NV 0.3475
SHDKG14NV DGFEORM23 0.3475
Run Code Online (Sandbox Code Playgroud)
干净的
ID1 ID2 value
BHFUD13XG KLSIENAL1 0.3475
GLADKK123 FBNAFLEL2 0.2956
DGFEORM23 SHDKG14NV 0.3475
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
我正在尝试绘制此 ggplot 频率计数ggplot2,但不带负号,值低于 0。我找不到如何做到这一点。因此,如果有人可以帮助我,我将不胜感激。

我正在使用case_when()fromdplyr创建以下列,result.
z <- tibble(a = c(40, 30, NA),
b = c(NA, 20, 10))
z %>%
mutate(result = case_when(
!is.na(a) ~ a,
is.na(a) & !is.na(b) ~ b
)
)
Run Code Online (Sandbox Code Playgroud)
上面给出了以下内容:
a b result
<dbl> <dbl> <dbl>
1 40 NA 40
2 30 20 30
3 NA 10 10
Run Code Online (Sandbox Code Playgroud)
但是,我想同时创建另一列 ,它显示从中提取result_logic值的位置(a 或 b)。result输出看起来像这样。
a b result result_logic
<dbl> <dbl> <dbl> <chr>
1 40 NA 40 a
2 30 20 30 a
3 …Run Code Online (Sandbox Code Playgroud) 在连续的范围内,我可以使用 来降低刻度标签的密度breaks,并使用 来以灵活的方式很好地控制它们的密度scales::pretty_breaks()。但是,我不知道如何通过离散规模实现类似的目标。具体来说,如果我的离散标签是letters,那么假设我想显示所有其他标签来清理图表。有没有一种简单、系统的方法来做到这一点?
我有一个可行的技巧(见下文),但正在寻找更自动和优雅的东西。
library(tidyverse)
# make some dummy data
dat <-
matrix(sample(100),
nrow = 10,
dimnames = list(letters[1:10], LETTERS[1:10])) %>%
as.data.frame() %>%
rownames_to_column("row") %>%
pivot_longer(-row, names_to = "column", values_to = "value")
# default plot has all labels on discrete axes
dat %>%
ggplot(aes(row, column)) +
geom_tile(aes(fill = value))
Run Code Online (Sandbox Code Playgroud)

# desired plot would look like following:
ylabs <- LETTERS[1:10][c(T, NA)] %>% replace_na("")
xlabs <- letters[1:10][c(T, NA)] %>% replace_na("")
# can force desired axis text …Run Code Online (Sandbox Code Playgroud) 我想同时将多个不同的函数应用于一个数据帧,然后将结果放入数据帧列表中。因此,例如,我可以arrange按一列,然后将输出保存为新的数据框。或者我可以filter一些数据,然后保存为另一个新的数据框(等等)。我觉得一定有一种简单的方法可以用purrror来做到这一点apply,但我不确定如何继续。所以,我想知道是否有一种方法可以给出函数列表,然后返回数据帧列表。以下是我应用的一些示例函数mtcars:
library(tidyverse)\n\nfilter_df <- function(x, word) {\n x %>% \n tibble::rownames_to_column("ID") %>% \n filter(str_detect(ID, word))\n}\na <- filter_df(mtcars, "Merc")\n\n\nmean_n_df <- function(x, grp, mean2) {\n x %>%\n group_by({{grp}}) %>%\n summarise(mean = mean({{mean2}}), n = n())\n}\nb <- mean_n_df(mtcars, grp = cyl, mean2 = wt)\n\n\n\nrating <- function(x, a, b, c) {\n x %>% \n rowwise %>% \n mutate(rating = ({{a}}*2) + ({{b}}-5) * abs({{c}} - 30))\n \n}\nc <- rating(mtcars, a = cyl, b = …Run Code Online (Sandbox Code Playgroud) 我有一个名为 Words 的字符串向量,我需要使用 删除所有空字符串library(stringr)。我尝试过str_remove_all(words, pattern = ""),但它告诉我:
错误:不支持空“pattern”。
我应该怎么办?任何帮助,将不胜感激。
如果我在 R 中有一个数据框:
暗淡(df) [1] 9 705936
我想通过按列将其拆分为 28 个部分,并且当我完成每个较小的数据帧时仍然拥有所有九行。我怎么做?因为我尝试过的各种方法都把事情搞砸了,而且我已经失去了耐心。看起来这应该是一行命令,但我无法理解。
错误信息:
C:\FWE\Android\app\build\generated\data_binding_base_class_source_out\debug\out\com\test\app\databinding\RowCategoryBinding.java:14: error: cannot find symbol
import com.test.app.Models;
symbol: class Models
location: package com.test.app
Run Code Online (Sandbox Code Playgroud)
关于RowCategoryBinding.java:14,它包含这个
import com.test.app.Models;
Run Code Online (Sandbox Code Playgroud)
CategoriesModel.java如果我将文件放入 Models 文件夹中,则会出现错误
com.test.app
|
--- Adapters
--- Activites
--- Fragments
--- Models
|
--- CategoriesModel.java
--- Interfaces
--- Utils
--- ViewModels
Run Code Online (Sandbox Code Playgroud)
但是,如果我将CategoriesModel.java文件移到模型之外,那么该应用程序将正常运行而不会出现错误。是什么原因?
com.test.app
|
--- Adapters
--- Activites
--- Fragments
--- Models
--- Interfaces
--- Utils
--- ViewModels
--- CategoriesModel.java
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 删除列名称的前 4 个字符stringr。我知道如何指定我想要保留的字符,但由于每列长度不同,我需要指定我不想保留的字符,但我不知道该怎么做。
我怎样才能做到这一点?