当前位置: 首页 > 知识库问答 >
问题:

根据R中不同id的前一个函数对下一行应用函数

艾仲渊
2023-03-14

我想为不同的df-id应用一个函数,如果下一行不同于前一行,则返回1,否则返回0。

我完全不知道我该如何实现这一目标,无论如何都可以完成它吗?

数据结构如下:

df <- structure(list(
      id = c(2,2,3,3,4,4,5,5),
      job_position = c("Analyst", "Supervisor",
                       "HRBP", "HRBP", "Economist",
                       "Financial Planner", "Reporter",
                       "Reporter")),
      class = "data.frame",
      row.names = c(NA, -8L))
))

#  id    job_position
#   2       Analyst
#   2      Supervisor
#   3        HRBP
#   3        HRBP
#   4      Economist
#   4      Financial Planner
#   5       Reporter
#   5       Reporter

预期输出应如下所示:

#  id    job_position         changing_job_position
#   2       Analyst                   0
#   2      Supervisor                 1
#   3        HRBP                     0
#   3        HRBP                     0
#   4      Economist                  0
#   4      Financial Planner          1 
#   5       Reporter                  0
#   5       Reporter                  0

共有2个答案

解晟睿
2023-03-14

对于每个id,您可以检查当前值是否与前一个值不同。

library(dplyr)

df %>%
  group_by(id) %>%
  mutate(changing_job_position = +(job_position != lag(job_position, 
                                   default = first(job_position))))

#    id job_position      changing_job_position
#  <dbl> <chr>                             <int>
#1     2 Analyst                               0
#2     2 Supervisor                            1
#3     3 HRBP                                  0
#4     3 HRBP                                  0
#5     4 Economist                             0
#6     4 Financial Planner                     1
#7     5 Reporter                              0
#8     5 Reporter                              0

使用<code>数据。table可以执行以下操作:

library(data.table)
setDT(df)[, changing_job_position := +(job_position != shift(job_position,
                                       fill = first(job_position))), id]
阳兴文
2023-03-14

我们可以按“id”分组,根据任何< code >重复或< code>n_distinct(job_position)创建“changing_job_position”

library(dplyr)
df %>%
    group_by(id) %>% 
    mutate(changing_job_position = + (any(duplicated(job_position)) &
          row_number() == 1)) %>% 
    ungroup %>% 
    mutate(changing_job_position = lead(changing_job_position, default = 0))

-输出

# A tibble: 8 x 3
#     id job_position      changing_job_position
#  <dbl> <chr>                             <dbl>
#1     2 Analyst                               0
#2     2 Supervisor                            1
#3     3 HRBP                                  0
#4     3 HRBP                                  0
#5     4 Economist                             0
#6     4 Financial Planner                     1
#7     5 Reporter                              0
#8     5 Reporter                              0
 类似资料:
  • 我想继续将此函数应用于我的所有数据页,例如。df1,df2,df3...DF100。输出文件应保持相同的dataframe类型和名称。 lapply函数不起作用,因为它返回一个列表,而不是单独的数据帧。

  • 我想在中的包中使用功能,它有一个需求,作为

  • 所以我在用摩卡酵素Sinon测试React app。我试图用if语句测试一个函数,其中有一个对另一个函数的调用。我的目标是输入if语句,但是存根第二个函数调用。代码如下: 所以我想输入if语句,但不调用getUsers()函数。我该怎么做?我正在监视SearchChange(),如下所示: 期待听到,谢谢!

  • 我试图用R来求一个数据帧中多个列(但不是全部)的总和。问题是我只想求大于该行值中值的值的总和,而忽略零。 下面是一个显示两行的示例,其中 20 列,其中 6 列(列 x1:x6)具有我想考虑的总和值: 忽略零,第一行的中位数是4,第二行是2.5。所以我想求和剩下的数字 有许多行数据。我已经将中值(我只是使用 excel 来获取此值)放在另一列中,我将称之为 ,因此可以使用它,而不必在 R 代码中计

  • 我是熊猫数据框的新手,我想应用一个函数,在同一列中取几行。就像当你应用函数diff(),但我想计算文本之间的距离。所以我定义了一个测量距离的函数,我试图使用应用,但我不知道如何选择几行。下面我展示了一个我尝试过的例子和我所期望的: 但它不起作用。我想得到的是: 提前感谢您为我提供的任何帮助。

  • 我是新来的Clojure和玩它的乐趣。 我正在阅读一个CSV文件,并希望对每一列应用一个不同的函数。什么是一个优雅的(既简洁又可读)方法来做到这一点?我探讨了两种方法: null 对于每一行... ...我想对每个元素应用一个不同的函数,得到这样的结果: 我要使用的函数是: null 使用此方法,我首先将每一行转换为一个映射: 编辑:并且我想获取此地图: 转换器也存储在映射中: 最后我会把数据放入