【问题标题】:Operations on single row in dplyr [duplicate]dplyr中单行的操作[重复]
【发布时间】:2019-09-15 01:39:52
【问题描述】:

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

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

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

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

我意识到这在基础 R 中是一个简单的操作,但我非常好奇并且很想使用 dplyr 操作和管道来实现这一点。这是可能的还是违反 dplyr 语法?

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

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

我展示的第一个例子:

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

将导致所有行的 a_xPlacexHolderxColumnaPlacexHolderx_ 列为 2。

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

【问题讨论】:

标签: r dplyr


【解决方案1】:

您可以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))

【讨论】:

    【解决方案2】:

    mutate() 用于创建列。

    你可以做类似df[1,1] &lt;- df[1,1] + df[1,2]

    一个例子:

    【讨论】:

    • 知道了,dplyr 操作只适用于整个列而不是单个元素?
    • 是的,mutate 用于通过使用类似代码的函数(在大括号内)添加新列。我们可以使用类似矩阵的模型来编辑单行和列
    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2021-09-01
    • 2023-03-29
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多