小编Gre*_*reg的帖子

R中基于多个条件的查找表

谢谢你看我的问题!

我有以下(虚拟)数据用于患者在 3 项任务中的表现:

patient_df = data.frame(id = seq(1:5),
                        age = c(30,72,46,63,58),
                        education = c(11, 22, 18, 12, 14),
                        task1 = c(21, 28, 20, 24, 22),
                        task2 = c(15, 15, 10, 11, 14), 
                        task3 = c(82, 60, 74, 78, 78))
Run Code Online (Sandbox Code Playgroud)
> patient_df
  id age education task1 task2 task3
1  1  30        11    21    15    82
2  2  72        22    28    15    60
3  3  46        18    20    10    74
4  4  63        12    24    11    78
5  5  58        14 …
Run Code Online (Sandbox Code Playgroud)

lookup r lookup-tables

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

将pivot_longer与现有的names_to列一起使用

举一个像这样的示例数据框(真实的数据框有更多列):

df <- data.frame(A = seq(1, 3, 1),
                 B = seq(4, 6, 1))
Run Code Online (Sandbox Code Playgroud)

我可以用来pivot_longer收集我感兴趣的列(AB),如下所示:

library(dplyr)
library(tidyr)
df <- df %>% 
  pivot_longer(cols = c("A", "B"), names_to = "Letter", values_to = "Number")
df
  Letter Number
  <chr>   <dbl>
1 A           1
2 B           4
3 A           2
4 B           5
5 A           3
6 B           6
Run Code Online (Sandbox Code Playgroud)

现在假设C我的数据框中还有另一列,使其不再整洁

C <- seq(7, 12, 1)

df_2 <- data.frame(df, C)
df_2
  Letter Number  C
1      A      1  7
2 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

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

分块读取 20GB 文件而不超出我的 RAM - R

我目前正在尝试读取 20GB 的文件。我只需要该文件的 3 列。我的问题是,我的内存限制为 16 GB。我尝试使用该函数和skip参数readr以块的形式使用和处理数据,但这都超出了我的RAM限制。即使是读取一行的调用也会耗尽我所有的 RAM。read_csv_chunkedread_csvread_csv(file, ..., skip = 10000000, nrow = 1)

我现在的问题是,如何读取这个文件?有没有办法在不使用那么多内存的情况下读取文件块?

csv r

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

通过在另一列中出现多个值来过滤组

类似于这个问题,但增加了皱纹。我只想过滤在组的任何行的特定列中具有两个(或全部几个)值的行组。

例如,假设我有这个数据框:

df <- data.frame(Group=LETTERS[c(1,1,1,2,2,2,3,3,3,3)], Value=c(5, 1:4, 1:4, 5))
Run Code Online (Sandbox Code Playgroud)

我想要那些字母,其中任何字母都有对应值为 4 的行和对应值为 5 的行,所以:

  Group Value
  <fct> <dbl>
1 C         2
2 C         3
3 C         4
4 C         5
Run Code Online (Sandbox Code Playgroud)

我能做到这一点与一对any内部调用filter是这样的:

df %>% 
  group_by(Group) %>% 
  filter(any(Value == 4),
         any(Value == 5))
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行中进行过滤器调用?像:(注意这不起作用all_of不是真正的功能)

df %>% 
  group_by(Group) %>% 
  filter(all_of(Value == 4 & Value == 5))
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

将 str_detect 映射到字符串列表以检测第二个字符串列表

获取字符串列表:

strings <- c("ABC_XZY", "qwe_xyz", "XYZ")
Run Code Online (Sandbox Code Playgroud)

我想获取其中strings不包含特定子字符串的所有元素

avoid <- c("ABC")
Run Code Online (Sandbox Code Playgroud)

我可以做这个

library(stringr)
library(dplyr)
library(purrr)

strings %>% 
   .[!map_lgl(., str_detect, avoid)]
[1] "qwe_xyz" "XYZ"
Run Code Online (Sandbox Code Playgroud)

我想做的是指定几个子字符串

avoid_2 <- c("ABC", "qwe")
Run Code Online (Sandbox Code Playgroud)

然后像以前一样映射列表(不起作用)

strings %>% 
   .[!map_lgl(., str_detect, avoid_2)]
Error: Result 1 must be a single logical, not a logical vector of length 2
Run Code Online (Sandbox Code Playgroud)

我想要的是

[1] "XYZ"
Run Code Online (Sandbox Code Playgroud)

错误很明显 - 的每个元素都string为 的每个元素生成一个逻辑avoid_2,总共 2 个逻辑/元素,并且map_lgl只能处理一个/元素。

我当然可以单独处理每个子字符串,但我不想 - 我想制作一个子字符串列表

不想要,但确实有效

strings %>%
  .[!map_lgl(., str_detect, "ABC")] %>% 
  .[!map_lgl(., str_detect, "qwe")]
Run Code Online (Sandbox Code Playgroud)

r stringr purrr

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

在 R 数据框列中随机分布向量

我一定错过了 R 中一个明显的东西。

我有一个向量 vec = c("v1","v2","v3"),我想沿着数据框中的列分布这个向量

Girth   Height  Volume  newcolumn
8.3      70     10.3    V1
8.6      65     10.3    V2
8.8      63     10.2    V3
10.5     72     16.4    V1
10.7     81     18.8    V2
10.8     83     19.7    V3
11       66     15.6    V1
11       75     18.2    V2
10.8     83     19.7    V3
11       66     15.6    V1
11       75     18.2    V2
11.1     80     22.6    V3
Run Code Online (Sandbox Code Playgroud)

提前致谢。

r

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

标签 统计

r ×6

csv ×1

dplyr ×1

lookup ×1

lookup-tables ×1

purrr ×1

stringr ×1

tidyr ×1