r - r 中分类变量 (id) 的每个第一次观察的虚拟变量

标签 r

问题: 我想在 R 中创建一个虚拟变量 first ,如果另一个虚拟变量的值从 0 变为 1,并且它不是 id 编号的第一个观察值,则该变量为 1。这背后的问题是,我想识别在面板设置中观察的时间段内进入市场的公司。

作为一个例子,我尝试用一​​个小样本集创建这个:

id <- c(1,1,1,2,2,3,3,3) 
dummy <- c(0,1,1,0,1,1,0,1)

df <- data.frame(id,dummy)
df[,"id"]


first.dum <- function(x)  
  c( x[-1,"id"] == x[,"id"]
    & x[-1,"dummy"] != x[,"dummy"]
     & x[,"dummy"] == "1")

df$first <- first.dum(df)
df 

结果就像......

 id dummy first
1  1     0 FALSE
2  1     1 FALSE
3  1     1 FALSE
4  2     0 FALSE
5  2     1 FALSE
6  3     1  TRUE
7  3     0 FALSE
8  3     1 FALSE

我想我不明白数据帧操作的真正工作原理。

如有任何帮助,我们将不胜感激。

最佳答案

这是我使用data.table包来解决这个问题的方法

library(data.table)
setDT(df)[, first := c(0, diff(dummy)) == 1, id][]
#    id dummy first
# 1:  1     0 FALSE
# 2:  1     1  TRUE
# 3:  1     1 FALSE
# 4:  2     0 FALSE
# 5:  2     1  TRUE
# 6:  3     1 FALSE
# 7:  3     0 FALSE
# 8:  3     1  TRUE

基本上,我们按组检查dummy是否比之前的观察值大一(从第二个观察值开始)。

您可以使用dplyr进行类似的操作

library(dplyr)
df %>% group_by(id) %>% mutate(first = c(0, diff(dummy)) == 1)

或者使用基本 R

unlist(tapply(df$dummy, df$id, function(x)  c(0, diff(x)) == 1))

关于r - r 中分类变量 (id) 的每个第一次观察的虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27936739/

相关文章:

r - 如何创建亥维赛函数?

r - 如何在 R 中获取 AST 作为列表

R:如何有条件地更改 ggplot 分面图中使用的 3 个变量中的 1 个变量的值

r - 由于 NA 的原因,无法对数据帧进行子集化(过滤)

替换包含括号的字符串

r - 是否有任何服务、扩展可以缩小 R 代码?

java - 系列线在 JFreeChart 中未正确显示

r - 如何使这个循环更有效率?

r - 使用 ggplot 绘制 parking 场占用的 parking 位

r - 将 R 代码转换为 R 风格