在R中创建具有不同参数的虚拟对象

时间:2017-10-31 17:19:49

标签: r classification svm dummy-variable

我正在处理大量公司帐户数据,以便在公司破产时解决分类问题。

数据集包含一个变量liquid,表示清算开始的年份。考虑到公司实际开始清算,这个变量在每年的观察中都是无所不在的。否则它为零。通常,liquid大于观察的最后一年。因此,在公司开始清算的那一年,没有对公司数据的观察。有时候,还有更长的差距。例如,一家公司在2005年开始清算,但最后一次对财务比率的观察是在2002年。

数据样本可能如下所示:

sample table

现在,我想创建一个名为bankruptcy的新假人。如果是开始清算的公司的最后一次观察(有财务数据),则应该取值1。您可以在上表中看到bankruptcy的外观。我该怎么办?

2 个答案:

答案 0 :(得分:0)

可能有更好的方法,但

怎么样

library(dplyr)

df <-structure(list(year = structure(c(1L, 2L, 3L, 2L, 3L, 4L, 5L,  2L, 3L), .Label = c("2000", "2001", "2002", "2003", "2004"), class = "factor"), liquid = structure(c(2L, 2L, 2L, NA, NA, NA, NA, 1L, 1L), .Label = c("2003",  "2005"), class = "factor"), company = structure(c(1L, 1L, 
1L, 2L, 2L, 2L, 2L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"),  bankruptcy = c(0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("year", "liquid", "company", "bankruptcy"), row.names = c(NA, -9L), class = "data.frame")



df %>%
   mutate(bankruptcy = 0)  %>%
   group_by(company) %>%
   mutate(bankruptcy = c(bankruptcy[-n()], 1)) %>%
   mutate(bankruptcy = ifelse(is.na(liquid),0,bankruptcy))

答案 1 :(得分:0)

如果我从您想要的输出中正确理解了您,那么您希望bankruptcy为每个liquid取最高company的值。

h / t到@ user6617454的结构。

df <-structure(list(year = structure(c(1L, 2L, 3L, 2L, 3L, 4L, 5L,  2L, 3L), .Label = c("2000", "2001", "2002", "2003", "2004"), class = "factor"), liquid = structure(c(2L, 2L, 2L, NA, NA, NA, NA, 1L, 1L), .Label = c("2003",  "2005"), class = "factor"), company = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"),  ), .Names = c("year", "liquid", "company"), row.names = c(NA, -9L), class = "data.frame")

df$year <- as.numeric(as.character(df$year))

df$maxyear <- tapply(df$year, df$company, max)
df$bankruptcy <- ifelse(!is.na(df$liquid) & df$year == df$maxyear, 
                        1, 
                        0)

在该解决方案中,bankruptcy会在公司有1值时显示liquid,特定行是该公司的最大值。如果您的例子不能代表您的实际问题,这可能无效,但这确实会在附加图像中产生输出。