r - 我可以按行识别第一个和最后一个观察值吗
问题描述
想确定每个月开始和结束的公司数量。目标是按列说明有多少公司开始和结束。
我的数据看起来像这样,有更多的行和列。
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。例如,公司的第 2 行从 1990_01 开始,到 1990_05 结束,尽管中间有 NaN。
我尝试了以下代码
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))
但是得到以下错误信息
Error in arrange_impl(.data, dots) :
data frame column with incompatible number of rows (465), expecting : 59378
任何帮助表示赞赏。
解决方案
你可以做
apply(df[,-1], 1, function(x) range(which(!is.nan(x))))
# [,1] [,2] [,3]
# [1,] 3 1 1
# [2,] 5 5 4
如果您想为行和列添加名称,那么我们可以将其扩展为:
apply(df[,-1], 1, function(x) range(which(!is.nan(x)))) %>%
t %>%
`colnames<-`(c('First','Last')) %>%
`row.names<-`(df[,1])
# First Last
# fg23 3 5
# sdf1 1 5
# sdf1 1 4
推荐阅读
- xaml - Xamarin Forms Image 具有 100% 的父容器宽度和自动高度以保持纵横比
- django - 在 django 中从我的模型中获取所有列
- c# - 检查是否已执行事件订阅
- .net - Samesite cookie 和 Owin
- java - 如何从 Java 应用程序中为操作系统上的所有其他进程锁定文件?
- swift - 如何使用分段控制在两个重叠容器视图之间添加滑动手势或滑动功能,如 instagram 配置文件?
- algorithm - 沿法线方向偏移的 3d 多段线
- c# - C# 套接字客户端服务器消息交换
- c# - 如果像 [] 一样传递,则访问查询参数值
- unix - Unix RedHat - 不能排除“查找”命令上的“权限被拒绝”消息