小编ale*_*523的帖子

R - 从字符串右侧第 n 次出现字符后提取信息

我见过很多提取 w/ 的迭代,gsub但它们主要处理从左到右或在一次发生后提取。我想从右到左匹配,计算 4 次出现-,匹配第 3 次和第 4 次出现之间的所有内容。

例如:

string                       outcome
here-are-some-words-to-try   some
a-b-c-d-e-f-g-h-i            f
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用的一些参考资料:

regex string parsing r gsub

9
推荐指数
1
解决办法
1万
查看次数

r - 检查每一列是否为 na

我在数据框中有一个列列表,我想在其中检查所有这些列是否存在NA并创建一个新列来告诉我它们是否NA存在。

这是一个使用一列的示例,Any_Flag我的新列在哪里:

ItemStats_2014$Any_Flag <- ifelse(is.na(ItemStats_2014$Item_Flag_A), "Y", "N")
Run Code Online (Sandbox Code Playgroud)

当我尝试在多个列上运行检查时,我得到了我期望的结果:

ItemStats_2014$Any_Flag <- ifelse(all(is.na(ItemStats_2014[ ,grep("Flag", names(ItemStats_2014), value = T)])), "Y", "N")
Run Code Online (Sandbox Code Playgroud)

它将所有内容返回为 false 或“N”。

r na

6
推荐指数
1
解决办法
9447
查看次数

openxlsx - 根据另一列中的文本填充行

我正在尝试openxlsx根据该行的列中的文本填充 Excel 工作簿中的一行。例如,如果单元格C3包含A,则突出显示第 3 行。

理想情况下,这不会是conditionalFormatting。我希望它是基于单元格中文本的行的实际颜色,但conditionalFormatting似乎是唯一的选择。如果我能把它变成实际的颜色,请告诉我。

下面的代码显示您可以根据value该行中的单元格突出显示一行,但如果您尝试使用文本则不能。此外,如果type设置为contains那么它似乎不接受任何样式。

wb <- createWorkbook()

addWorksheet(wb, "Dependent on")
addWorksheet(wb, "containsText")


negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")
posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE")


## highlight row based on value in column 2
writeData(wb, "Dependent on", data.frame(x = 1:10, y = runif(10)), startRow = 15)
conditionalFormatting(wb, "Dependent on", cols=1:2, rows=16:25, rule="$B16<0.5", style = negStyle)
conditionalFormatting(wb, "Dependent on", …
Run Code Online (Sandbox Code Playgroud)

r openxlsx

5
推荐指数
1
解决办法
2538
查看次数

r - 使用 kable 对具有相同名称的子列的列进行分组

我正在尝试使用kablekableextra创建一个具有不同分组标题但子标题中具有相同列名的表

例如,如果您查看Create Awesome LaTeX Table with knit::kable 和 kableExtra的“分组列/标题”部分(第 14 页) ,它会被分组,但子标题名称不同:

library(knitr)
library(kableExtra)
dt <- mtcars[1:5, 1:6]

kable(dt, "latex", booktabs = T) %>%
kable_styling() %>%
add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2, "Group 3" = 2))
Run Code Online (Sandbox Code Playgroud)

我想做的是将汽车作为组进行类似的操作(例如仅使用两辆车):

Mazda RX4 | Datsun 710
----------------------
mpg | cyl | mpg | cyl
----------------------
21.0|   6 | 21.4|   6
Run Code Online (Sandbox Code Playgroud)

或者作为另一个例子:

Group 1 | Group 2
------------------
x  |  y | x …
Run Code Online (Sandbox Code Playgroud)

r r-markdown bookdown kableextra kable

5
推荐指数
1
解决办法
6262
查看次数

显示每列的唯一值

我正在尝试为每列创建一个列类型和唯一变量的数据框。

我能够使用 获得所需数据帧格式的列类型map(df, class) %>% bind_rows() %>% gather(key = col_name, value = col_class),但无法使唯一变量成为数据帧而不是列表。

下面是一个小数据框和代码,用于获取列表中的唯一变量,但不是数据框。理想情况下,我可以在一个(地图)函数中执行此操作,但是如果我必须加入它们,那也没什么大不了的。


df <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))

library(tidyverse)

map(df, class) %>% bind_rows() %>% gather(key = col_name, value = col_class)

map(df, unique)
Run Code Online (Sandbox Code Playgroud)

当我尝试用同样的方法在map(df, unique)作为上map(df, class)我得到以下错误:Error: Argument 2 must be length 3, not 2预计,但我不知道怎么去解决它。

r dplyr purrr

4
推荐指数
1
解决办法
1588
查看次数

r - 按日期和按条件分组

在 R 中,使用dplyr我想为每个组过滤大于一个日期。

下面给了我结果,但我想知道是否有更优雅的方法来获得同样的东西。是否可以在不使用的情况下进行过滤mutate

max_dates <- data.frame(col_1 = c('a', 'b', 'c'), max_date = c('2021-08-23', '2021-07-19', '2021-07-02'))


df <- data.frame(col_1 = c(rep('a', 10), rep('b', 10), rep('c', 10)),
                 date = rep(seq(as.Date('2021-07-01'), by = 'week', length.out = 10), 3))

desired_df <- df %>% 
  left_join(max_dates, by = 'col_1') %>% 
  mutate(greater_than = ifelse(date >= max_date, T, F)) %>% 
  filter(greater_than)
Run Code Online (Sandbox Code Playgroud)

group-by r filter dplyr

1
推荐指数
1
解决办法
34
查看次数

标签 统计

r ×6

dplyr ×2

bookdown ×1

filter ×1

group-by ×1

gsub ×1

kable ×1

kableextra ×1

na ×1

openxlsx ×1

parsing ×1

purrr ×1

r-markdown ×1

regex ×1

string ×1