我想确定每月开始和结束的公司数量。我的数据看起来像这样,有更多的行和列。
Firm Return_1990_01 Return_1990_02 Return_1990_03 Return_1990_04 Return_1990_05
#1 fg23 NaN NaN 1.54 2.34 .641
#2 sdf1 1.35 NaN 3.53 NaN .231
#3 sdf1 1.12 2.44 1.51 1.64 NaN
一个挑战是,一家公司之间可能存在NaN。例如,尽管行之间存在NaN,但该行的第2行从1990_01开始到1990_05结束。
感谢您的帮助。
答案 0 :(得分:0)
假设您的数据帧名为df
,则可以尝试以下操作:
library(dplyr)
library(tidyr)
df %>%
gather(month, value, -Firm) %>%
filter(!is.nan(value)) %>%
arrange(Firm, month) %>%
group_by(Firm) %>%
summarise(start = first(month), end = last(month))
gather
将数据框从宽格式转换为长格式。接下来,根据需要过滤任何NaN
。然后搜索每个公司的第一个和最后一个非NaN
值。
答案 1 :(得分:0)
#Find first and last occurrence of !NA per Firm
tt <- apply(!is.na(x[-1]), 1, function(x) range(which(x)))
#Sum up the first/last occurrence in the month
res <- sapply(2:ncol(x)-1, function(i) {c(nStart=sum(tt[1,]==i), nEnd=sum(tt[2,]==i) )})
colnames(res) <- colnames(x)[-1] #Add the Month name
res
# Return_1990_01 Return_1990_02 Return_1990_03 Return_1990_04 Return_1990_05
#nStart 2 0 1 0 0
#nEnd 0 0 0 1 2