小编Joe*_*Joe的帖子

如何跳过第二行是csv文件,同时使用read_csv维护第一行作为列名?

Qualtrics生成第一行中带有变量名的csv文件,第二行中带有变量标签.我想使用read_csv()读取我的数据,同时读取第一行作为列名,然后跳过下一行变量标签.以下是我失败的尝试.

library(readr)
mydata <- read_csv("qualtrics_data.csv", col_names = TRUE, skip = 2) # this would actually skip both the names and label rows. 
Run Code Online (Sandbox Code Playgroud)

csv r qualtrics readr

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

使用pmap()计算多列的行方式

我试图更好地理解pmap()数据帧中的工作原理,并且pmap()从多个列应用计算方法时我得到了令人惊讶的结果.

mtcars %>% 
  mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>% 
  select(comp_var, vs, am, cyl)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,comp_var等于其行中vs的值,而不是给定行中三个变量的平均值.

我知道我可以得到准确的结果comp_var...

mtcars %>% 
  rowwise() %>% 
    mutate(comp_var = mean(c(vs, am, cyl))) %>% 
    select(comp_var, vs, am, cyl) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)

...但我想了解pmap()在这种情况下应该如何应用.

r pmap purrr

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

在多列上使用 any() 或 all() 与 is.na()

我想从数据集中删除全部为 NA 的行(也称为保留具有任何非 NA 的行)作为列列表。我如何更新此代码以便x&y作为向量提供?这将使我能够灵活地添加和删除列以进行检查。

library(dplyr)

ds <- 
  tibble(
  id = c(1:4),
    x = c(NA, 1, NA, 4),
    y = c(NA, NA , 3, 4)
  ) 

ds %>%
  rowwise() %>%
  filter(
    any(
      !is.na(x),
      !is.na(y)
    ) 
  ) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写类似的内容any(!is.na(c(x,y))),但我不确定如何向is.na().

r

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

在 dplyr 自定义函数中将函数参数作为字符串求值

我正在编写一个自定义函数,用于输出字段的平均值和标准差。我希望 .field 参数在某些状态下以整齐的方式进行评估,并在另一个阶段作为字符串进行评估。如何将 .field 参数评估为字符串?

library(dplyr)
library(tidyr)

mean_sd <- function(.data, .field){
    .data %>% 
    summarise(
        mean = mean({{.field}}), 
        sd = sd({{.field}})
    ) %>% 
    pivot_longer(
        everything(),
        names_to = "stat",
        values_to = '.field' # I'd like this to print the value of .field
        ) %>% 
    mutate(across(is.numeric, ~round(.x, 2)))
}

mean_sd(mtcars, mpg)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r dplyr tidyeval

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

使用大于x的任何值提取所有行

假设我有一个非常大的相关表,并且只想检查大于某个值的相关性(例如,0.40).如何提取值大于0.40的所有行或列?

我可以使用apply执行此操作,但希望在tidyverse中执行操作.

library(tidyverse)

df <- mtcars %>% 
  select_if(is.numeric) %>% 
  cor() %>% 
  round(digits = 2) %>% 
  as.data.frame() 

df[apply(df, 1, function(row) {all(abs(row) > .40)}),]
Run Code Online (Sandbox Code Playgroud)

r dataframe tidyverse

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

标签 统计

r ×5

csv ×1

dataframe ×1

dplyr ×1

pmap ×1

purrr ×1

qualtrics ×1

readr ×1

tidyeval ×1

tidyverse ×1