相关疑难解决方法(0)

使用dplyr将函数应用于表的每一行?

在使用plyrI 时,我经常发现使用adply标量函数很有用,我必须将其应用于每一行.

例如

data(iris)
library(plyr)
head(
     adply(iris, 1, transform , Max.Len= max(Sepal.Length,Petal.Length))
    )
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len
1          5.1         3.5          1.4         0.2  setosa     5.1
2          4.9         3.0          1.4         0.2  setosa     4.9
3          4.7         3.2          1.3         0.2  setosa     4.7
4          4.6         3.1          1.5         0.2  setosa     4.6
5          5.0         3.6          1.4         0.2  setosa     5.0
6          5.4         3.9          1.7         0.4  setosa     5.4
Run Code Online (Sandbox Code Playgroud)

现在我正在使用dplyr更多,我想知道是否有一个整洁/自然的方式来做到这一点?因为这不是我想要的:

library(dplyr)
head(
     mutate(iris, Max.Len= max(Sepal.Length,Petal.Length))
    )
  Sepal.Length Sepal.Width Petal.Length Petal.Width …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr

111
推荐指数
5
解决办法
7万
查看次数

具有NA值的两列数据帧的总和

我有一个带有一些NA值的数据框.我需要两列的总和.如果值为NA,我需要将其视为零.

a  b c d
1  2 3 4
5 NA 7 8
Run Code Online (Sandbox Code Playgroud)

列e应该是b和c的总和:

e
5
7
Run Code Online (Sandbox Code Playgroud)

我尝试过很多东西,并且没有运气就完成了二十几次搜索.这似乎是一个简单的问题.任何帮助,将不胜感激!

r

20
推荐指数
2
解决办法
3万
查看次数

汇总所有列

我有以下格式的数据:

gen = function () sample.int(10, replace = TRUE)
x = data.frame(A = gen(), C = gen(), G = gen(), T = gen())
Run Code Online (Sandbox Code Playgroud)

我现在想要在每行中附加行中所有元素的总和(我的实际函数更复杂,但sum说明了问题).

没有dplyr,我会写

cbind(x, Sum = apply(x, 1, sum))
Run Code Online (Sandbox Code Playgroud)

导致:

   A C  G T Sum
1  3 1  6 9  19
2  3 4  3 3  13
3  3 1 10 5  19
4  7 2  1 6  16
…
Run Code Online (Sandbox Code Playgroud)

但用dplyr做这件事似乎很难.

我试过了

x %>% rowwise() %>% mutate(Sum = sum(A : T))
Run Code Online (Sandbox Code Playgroud)

但结果不是每一行的总和,这是意想不到的东西,(对我来说)莫名其妙.

我也试过了

x %>% rowwise() …
Run Code Online (Sandbox Code Playgroud)

r summarization dplyr

10
推荐指数
2
解决办法
1830
查看次数

使用 dplyr 对多列求和时忽略 NA

我正在对多列求和,有些列有 NA。我在用

 dplyr::mutate
Run Code Online (Sandbox Code Playgroud)

然后写出列的算术和以获得总和。但是列有 NA,我想将它们视为零。我能够让它与 rowSums 一起工作(见下文),但现在使用 mutate。使用 mutate 可以使其更具可读性,但也可以让我减去列。示例如下。

require(dplyr)
data(iris)
iris <- tbl_df(iris)
iris[2,3] <- NA
iris <- mutate(iris, sum = Sepal.Length + Petal.Length)
Run Code Online (Sandbox Code Playgroud)

如何确保 Petal.Length 中的 NA 在上述表达式中被处理为零?我知道使用 rowSums 我可以执行以下操作:

iris$sum <- rowSums(DF[,c("Sepal.Length","Petal.Length")], na.rm = T)
Run Code Online (Sandbox Code Playgroud)

但是使用 mutate 甚至可以更容易地设置 diff = Sepal.Length - Petal.Length。使用 mutate 完成此操作的建议方法是什么?

请注意,该帖子类似于以下 stackoverflow 帖子。

使用 dplyr 对多列求和

减去多列忽略 NA

r multiple-columns dataframe dplyr

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

创建一个新列,它是dplyr中特定列(由其名称选择)的总和

我的问题是如何创建一个新列,它是dplyr中某些特定列(由其名称选择)的总和.例如,使用iris数据集,我创建一个名为Petal的新列,它是Petal.Length和Petal.Width的总和.

iris %>% mutate(Petal = Petal.Length+Petal.Width)
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个20列的数据集,其名称中包含'Petal'.我想创建一个"Petal"列,它总结了所有这些列.我绝对不想在我的代码中键入所有列名称.感觉在dplyr中应该有一行代码可以实现.感谢是否有人可以提供帮助.

r dplyr tidyverse

4
推荐指数
2
解决办法
3483
查看次数

dplyr rowwise sum和其他函数,如max

如果我想在数据框中使用一些变量求和dplyr,我可以这样做:

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

> select(iris, starts_with('Petal')) %>% rowSums()
  [1] 1.6 1.6 1.5 1.7 1.6 2.1 1.7 1.7 1.6 1.6 1.7 1.8 1.5 1.2 1.4 1.9 1.7 1.7 2.0 1.8 1.9 1.9 1.2 2.2 2.1 1.8 2.0 1.7 …
Run Code Online (Sandbox Code Playgroud)

r dplyr rowwise

4
推荐指数
3
解决办法
3864
查看次数

R:使用dplyr逐行汇总一系列列

本着在这里这里的类似思路,我希望能够对我的data_frame&列中的一系列列求和,并创建一个新列:

df_abc = data_frame(
  FJDFjdfF = seq(1:100),
  FfdfFxfj = seq(1:100),
  orfOiRFj = seq(1:100),
  xDGHdj = seq(1:100),
  jfdIDFF = seq(1:100),
  DJHhhjhF = seq(1:100),
  KhjhjFlFLF = seq(1:100),
  IgiGJIJFG= seq(1:100),
)

# this does what I want
df_abc %>% 
  mutate(
    sum_1 = orfOiRFj + xDGHdj + jfdIDFF + DJHhhjhF
  ) 
Run Code Online (Sandbox Code Playgroud)

显然,如果此顺序中有很多变量,则将它们键入出来是不可行的。另外,变量的名称不是正则表达式友好的,因此不能按规则选择,除非它们按顺序出现。

我希望在tidyverse中存在一个抽象,该抽象允许以下内容:

df_abc %>% 
  mutate(
    sum_1 = sum(orfOiRFj:DJHhhjhF)
  )
Run Code Online (Sandbox Code Playgroud)

谢谢。

r dplyr tidyr tidyverse

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

快速汇总R数据帧中的多个列

我有一个类似的数据框mtcars,以及一个列名称的字符串向量c("mpg", "cyl", "disp", "hp", "drat"),我希望将所有列加在一起成为一个新的列.

我通常会使用类似的东西

mtcars %>% transmute(new_col = mpg + cyl + disp + hp + drat)

   new_col
1   300.90
2   300.90
3   231.65
4   398.48
5   564.85
6   356.86
7   630.51
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一个存储在向量中的100个列名,这将变得非常繁琐.

所以我的问题是,有没有一种方法可以将许多列汇总在一起,列名称保存在字符串向量中?

r dataframe dplyr

3
推荐指数
3
解决办法
5150
查看次数

R中选定列的行方向均值

让我们来说明着名iris数据集上的问题.我需要按行应用所选函数,但仅适用于所选列.示例如下:

library(tidyverse)

iris %>%
  mutate_at(.funs = scale, .vars = vars(-c(Species))) %>%
  rowwise() %>% 
  mutate(my_mean=mean(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)))
Run Code Online (Sandbox Code Playgroud)

因此,首先我缩放所有变量,排除Species然后在所有四个数值变量上计算平均行数.但是,在真实数据集中,我有100多个数字变量,我想知道如何说服R自动包含除了所选变量之外的所有变量(例如,Species在给定的例子中).我在SO上讨论解决方案(例如,这个),但所有示例都明确引用了列名.任何指针都非常受欢迎.

编辑:经过一些改变,这是我的解决方案:

iris %>%
  as_tibble() %>% 
  mutate_at(.funs = scale, .vars = vars(-c(Species))) %>% 
  transmute(Species, row_mean = rowMeans(select(., -Species)))
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

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

逐行求两列

我想在我的数据框架中创建一个列,在那里我可以将数据帧的另外两列相加.

df <- data.frame(x = 1:10, y = 11:20)
Run Code Online (Sandbox Code Playgroud)

在这里,例如,我想添加第三列z,我有:

z <- c(12, 14, 16,..., 30)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

r dataframe

0
推荐指数
2
解决办法
205
查看次数

标签 统计

r ×10

dplyr ×8

dataframe ×3

tidyverse ×3

multiple-columns ×1

plyr ×1

rowwise ×1

summarization ×1

tidyr ×1