如何为 Dataframe 中的特定行/观察创建虚拟变量?

4sup72z8  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(138)

我正在回答伍德里奇的《计量经济学导论》第9章中的问题C12(iii):现代方法 *。该问题要求读者首先确定变量“bs”大于0.5的所有观测值。然后要求读者为每个观测值分配一个虚拟变量,以便在回归中使用。
我执行了问题的第一部分(使用以下代码标识'bs'大于0.5的所有观测:

library('wooldridge')
which(elem94_95$bs>0.5)
[1]   68 1127 1508 1670

在查看rStudio中生成的表之后,我发现相关的行/观察值是68;一千一百二十七、一千五百零八、和一千六百七十人。
我想为这些行/观察中的每一个创建一个伪变量,即“d 68”;“第一一二七号";和“d1670”。我该怎么做呢?我第一次尝试的直观解决方案如下:

elem94_95$d68<-ifelse(row==68,1,0)

然而,这并不奏效。

wdebmtf2

wdebmtf21#

我想出了以下解决方案:

elem94_95$rownumber<-1:nrow(elem94_95)
elem94_95$d68<-ifelse(elem94_95$rownumber==68,1,0)
elem94_95$d1127<-ifelse(elem94_95$rownumber==1127,1,0)
elem94_95$d1508<-ifelse(elem94_95$rownumber==1508,1,0)
elem94_95$d1670<-ifelse(elem94_95$rownumber==1670,1,0)

然而,这感觉并不优雅。如果其他人有办法直接在公式中包括行号,我会欢迎这种解决方案代替。

1rhkuytd

1rhkuytd2#

library(tidyverse)

df <- elem94_95 %>%  
  as_tibble() %>% 
  mutate(row = row_number(), 
         dummy = if_else(
           bs > 0.5, str_c("d", row), NA_character_
         )) 

df %>%  
  filter(!is.na(dummy))

# A tibble: 4 × 16
  distid schid lunch enrol staff exppp avgsal avgben math4 story4    bs lavgsal lenrol lstaff   row dummy
   <dbl> <int> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl> <dbl>  <dbl> <dbl>   <dbl>  <dbl>  <dbl> <int> <chr>
1   9030   192 40.7    167  85.6  3584  24425  16108  67.9   71.4 0.659   10.1    5.12   4.45    68 d68  
2  63160  5783  3.60   411 115.   5394  30304  17418  83.9   92.9 0.575   10.3    6.02   4.75  1127 d1127
3  82010   701 69.4    896  78.3  1353   9297   9295  41.2   48.5 1.00     9.14   6.80   4.36  1508 d1508
4  82040  5357 32.9    304  49.9  3532  50042  25134  57.6   55.9 0.502   10.8    5.72   3.91  1670 d1670

相关问题