在R数据框中创建布尔列,如果另一列的值逐行更改,则返回true

卡诺维奇

标题比较罗word,但我的问题很难用一个摘要来解释,因此我准备了一个可复制的示例。以下是我的数据框的子集:

> zed
   possessionName possessionMarket
1          Eagles   Boston College
2     Blue Devils             Duke
3            <NA>             <NA>
4     Blue Devils             Duke
5          Eagles   Boston College
6     Blue Devils             Duke
7     Blue Devils             Duke
8          Eagles   Boston College
9          Eagles   Boston College
10         Eagles   Boston College
11           <NA>             <NA>
12    Blue Devils             Duke
13    Blue Devils             Duke
14           <NA>             <NA>
15         Eagles   Boston College

> dput(zed)
structure(list(possessionName = c("Eagles", "Blue Devils", NA, 
"Blue Devils", "Eagles", "Blue Devils", "Blue Devils", "Eagles", 
"Eagles", "Eagles", NA, "Blue Devils", "Blue Devils", NA, "Eagles"
), possessionMarket = c("Boston College", "Duke", NA, "Duke", 
"Boston College", "Duke", "Duke", "Boston College", "Boston College", 
"Boston College", NA, "Duke", "Duke", NA, "Boston College")), class = "data.frame", row.names = c(NA, 
15L))

这是我正在寻找的输出:

> zed
   possessionName possessionMarket outputCol
1          Eagles   Boston College         1
2     Blue Devils             Duke         1
3            <NA>             <NA>         0
4     Blue Devils             Duke         0
5          Eagles   Boston College         1
6     Blue Devils             Duke         1
7     Blue Devils             Duke         0
8          Eagles   Boston College         1
9          Eagles   Boston College         0
10         Eagles   Boston College         0
11           <NA>             <NA>         0
12    Blue Devils             Duke         1
13    Blue Devils             Duke         0
14           <NA>             <NA>         0
15         Eagles   Boston College         1

问题:我希望newCol中的第一行为1。对于所有后续行,== 1如果学校名称从一行更改为另一行,我希望该值为例如,第1Eagles行是Blue Devils,第2行是,因此第2行的列中应有1 newCol

在存在的情况下,我希望该行为零。

请注意,即使存在NA,第2-4行的学校名称也不会改变,因此第4行== 0但是,在第10-12行中,数据从Eagles到Blue Devils(尽管中间有一个NA),所以第12行应为1。

通常我会按照以下方式做一些事情:

zed <- zed %>% 
  dplyr::mutate(newCol = ifelse(possessionName[2:length(possessionName)] != possessionName[1:(length(possessionName)-1)], 1, 0))

...但是由于NA的存在,这种方法被挫败了。我有更好的办法解决这个问题吗?我正在为此积极努力,希望在发布答案之前先发布答案,但可以使用一些帮助。提前致谢 !!!

罗纳克·沙

一种方法是使用fromNA用之前的NAs填充s并进行比较na.locfzoo

library(zoo)

zed$possessionName <- na.locf(zed$possessionName)
zed$output_col <- c(1, +(zed$possessionName[-1] != zed$possessionName[-nrow(zed)]))


zed
#   possessionName possessionMarket output_col
#1          Eagles   Boston College          1
#2     Blue Devils             Duke          1
#3     Blue Devils             <NA>          0
#4     Blue Devils             Duke          0
#5          Eagles   Boston College          1
#6     Blue Devils             Duke          1
#7     Blue Devils             Duke          0
#8          Eagles   Boston College          1
#9          Eagles   Boston College          0
#10         Eagles   Boston College          0
#11         Eagles             <NA>          0
#12    Blue Devils             Duke          1
#13    Blue Devils             Duke          0
#14    Blue Devils             <NA>          0
#15         Eagles   Boston College          1

但是由于您正在使用,tidyverse我们可以使用filllag

library(tidyverse)

zed %>%
  fill(possessionName) %>%
   mutate(output_col = c(1, +(possessionName != lag(possessionName))[-1]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果另一列中的值在列表中,则更改一列中的值[R]

根据条件在数据框列中更改值,在另一列中更改值

如果另一列中的值彼此相邻,则求和数据框中的列值

以 R 中另一列值的总和为条件在数据框中创建新列

如果另一列的值在pandas数据框中相同,如何减去2列

比较数据框中的两列,如果为False,则捕获另一列的值

如何基于另一个数据框中的列值创建布尔列

以R中另一列中的布尔布尔变量为条件选择数据框中的行

如何根据另一列更改数据框的列中的值?

根據數據框 R 中的另一列更改列中的值

在数据框中创建基于条件和另一列值的新列

从数据框列值创建函数,然后插入另一列的空白元素中

根据另一列的值创建列中中位数差异的数据框

根据数据框中另一列的值创建列

如果在另一个数据框列pandas中找到一列中的值,则返回值

熊猫:返回数据框,其中一列的值大于另一列的值

用R中另一列的分组值进行计数来创建一个新的数据框

在某一列中更改数据框中的值,其中另一列等于某些文本。

如何根据另一列中的条件更改数据框的某一列中的值?

Mysql查询:如果另一列中的值按顺序更改,则从列中返回一个值

从另一列创建一列列表,并在 Pandas 数据框中仅显示唯一值

比较两列不同的数据框并在 R 中创建另一列

如何更改熊猫数据框中某个类别的另一列中的值?

R:逐行汇总一列的值并创建新列

根据另一列中不同行中的值创建数据框或小标题

从熊猫数据框中另一列中的值创建变量

在R中另一数据框中的另一列的基础上在一个数据框中创建一列

如果一列在数据框中具有多个值,则创建多行

根据数据框 R 中另一列中的值复制值