如果组内某个变量的所有值都超过特定值,如何创建一个虚拟变量,该变量的值为 1

发布于 2025-01-16 10:32:34 字数 814 浏览 0 评论 0原文

我有一个如下所示的数据集:

dat <- data.frame (id  = c(1,1,1,1,1,2,2,2,2,2),
                   year = c(2015, 2016, 2017,2018, 2019, 2015, 2016, 2017, 2018, 2019),
                   ratio=c(0.6,0.6,0.65,0.7,0.8,0.4,1,0.5,0.3,0.7))

dat
   id year ratio
1   1 2015  0.60
2   1 2016  0.60
3   1 2017  0.65
4   1 2018  0.70
5   1 2019  0.80
6   2 2015  0.40
7   2 2016  1.00
8   2 2017  0.50
9   2 2018  0.30
10  2 2019  0.70

我想创建一个虚拟变量,如果每个 id 中所有比率变量的值都超过 0.5,则该变量的值为 1。生成的数据集应如下所示:

dat
   id year ratio dummy
1   1 2015  0.60     1
2   1 2016  0.60     1
3   1 2017  0.65     1
4   1 2018  0.70     1
5   1 2019  0.80     1
6   2 2015  0.40     0
7   2 2016  1.00     0
8   2 2017  0.50     0
9   2 2018  0.30     0
10  2 2019  0.70     0

非常感谢任何帮助。谢谢你!

I have a data set like the one below:

dat <- data.frame (id  = c(1,1,1,1,1,2,2,2,2,2),
                   year = c(2015, 2016, 2017,2018, 2019, 2015, 2016, 2017, 2018, 2019),
                   ratio=c(0.6,0.6,0.65,0.7,0.8,0.4,1,0.5,0.3,0.7))

dat
   id year ratio
1   1 2015  0.60
2   1 2016  0.60
3   1 2017  0.65
4   1 2018  0.70
5   1 2019  0.80
6   2 2015  0.40
7   2 2016  1.00
8   2 2017  0.50
9   2 2018  0.30
10  2 2019  0.70

I'd like to create a dummy variable that takes the value of 1 if all the values of the ratio variable within each id exceed 0.5. The resulting data set should be as follows:

dat
   id year ratio dummy
1   1 2015  0.60     1
2   1 2016  0.60     1
3   1 2017  0.65     1
4   1 2018  0.70     1
5   1 2019  0.80     1
6   2 2015  0.40     0
7   2 2016  1.00     0
8   2 2017  0.50     0
9   2 2018  0.30     0
10  2 2019  0.70     0

Any help is much appreciated. Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

佞臣 2025-01-23 10:32:34

您在评论中已经有了基本的 R 答案。这是 dplyr 和 data.table 版本 -

library(dplyr)

dat %>%
  group_by(id) %>%
  mutate(dummy = as.integer(all(ratio > 0.5))) %>%
  ungroup

#      id  year ratio dummy
#   <dbl> <dbl> <dbl> <int>
# 1     1  2015  0.6      1
# 2     1  2016  0.6      1
# 3     1  2017  0.65     1
# 4     1  2018  0.7      1
# 5     1  2019  0.8      1
# 6     2  2015  0.4      0
# 7     2  2016  1        0
# 8     2  2017  0.5      0
# 9     2  2018  0.3      0
#10     2  2019  0.7      0

data.table -

library(data.table)

setDT(dat)[, dummy := as.integer(all(ratio > 0.5)), id]
dat

You already have a base R answer in comments. Here is a dplyr and data.table version -

library(dplyr)

dat %>%
  group_by(id) %>%
  mutate(dummy = as.integer(all(ratio > 0.5))) %>%
  ungroup

#      id  year ratio dummy
#   <dbl> <dbl> <dbl> <int>
# 1     1  2015  0.6      1
# 2     1  2016  0.6      1
# 3     1  2017  0.65     1
# 4     1  2018  0.7      1
# 5     1  2019  0.8      1
# 6     2  2015  0.4      0
# 7     2  2016  1        0
# 8     2  2017  0.5      0
# 9     2  2018  0.3      0
#10     2  2019  0.7      0

data.table -

library(data.table)

setDT(dat)[, dummy := as.integer(all(ratio > 0.5)), id]
dat
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文