单行的dplyr操作

时间:2019-04-25 15:04:17

标签: r dplyr

是否可以对数据帧的单行用管道执行dplyr操作?例如,说我有一个以下数据框(称为df),并且想要对该数据框的列进行一些操作:

df <- df %>%
mutate(col1 = col1 + col2)

此代码将一列设置为等于该列与另一列的总和。如果我想这样做,但只能单行怎么办?

df[1,] <- df[1,] %>%
mutate(col1 = col1 + col2)

我意识到这在base R中是一个简单的操作,但是我很好奇,很想使用dplyr操作和管道来实现这一目标。这有可能还是违背dplyr语法?

这是一个例子。说我有一个数据框:

df = data.frame(a = rep(1, 100), b = rep(1,100))

我展示的第一个例子:

df <- df %>%
mutate(a = a + b)

所有列的a列将为2。

第二个示例只会导致a列的第一行为2。

2 个答案:

答案 0 :(得分:1)

mutate()用于创建列。

您可以执行类似df[1,1] <- df[1,1] + df[1,2]

的操作

一个例子:

enter image description here

答案 1 :(得分:0)

您可以mutate()case_when()进行条件操纵。

df %>%
    mutate(a = case_when(row_number(a) == 1 ~ a + b,
                         TRUE ~ a))

产生

# A tibble: 100 x 2
       a     b
   <dbl> <dbl>
 1     2     1
 2     1     1
 3     1     1
 4     1     1
 5     1     1
 6     1     1
 7     1     1
 8     1     1
 9     1     1
10     1     1
# … with 90 more rows

数据

library(tidyverse)
df <- tibble(a = rep(1, 100), b = rep(1,100))