R 如何按因素为第一个非NA组创建新列?
我想为每家公司创建一个专栏。新列R 如何按因素为第一个非NA组创建新列?,r,R,我想为每家公司创建一个专栏。新列Initial X是开始年份的第一个非NAX Firms Time X Initial X 1 1 100 100 1 2 50 100 1 3 70 100 2 1 NA 40 2 2 40 40 2 3 60 40
Initial X
是开始年份的第一个非NAX
Firms Time X Initial X
1 1 100 100
1 2 50 100
1 3 70 100
2 1 NA 40
2 2 40 40
2 3 60 40
3 1 30 30
3 2 40 30
3 3 80 30
4 1 NA 90
4 2 NA 90
4 3 90 90
这是akrun的等效答案,但对于数据表,这里有一个基本的R解决方案:
Firms Time X InitialX
1: 1 1 100 100
2: 1 2 50 100
3: 1 3 70 100
4: 2 1 NA 40
5: 2 2 40 40
6: 2 3 60 40
7: 3 1 30 30
8: 3 2 40 30
9: 3 3 80 30
10: 4 1 NA 90
11: 4 2 NA 90
12: 4 3 90 90
注:可复制形式的输入DF
:
initial <- function(x) sort(x, na.last = TRUE)[1]
initial <- function(x) if (all(is.na(x))) NA_real_ else na.omit(x)[1]
library(zoo)
initial <- function(x) na.locf0(x, fromLast = TRUE)[1]
行库(dplyr);df1%>%group_by(事务所)%>%mutate(newX=X[!is.na(X)][1])
谢谢@akrun,它能工作。
initial <- function(x) c(na.omit(x), NA_real_)[1]
transform(DF, Initial_X = ave(X, Firms, FUN = initial))
initial <- function(x) sort(x, na.last = TRUE)[1]
initial <- function(x) if (all(is.na(x))) NA_real_ else na.omit(x)[1]
library(zoo)
initial <- function(x) na.locf0(x, fromLast = TRUE)[1]
Lines <- "
Firms Time X Initial_X
1 1 100 100
1 2 50 100
1 3 70 100
2 1 NA 40
2 2 40 40
2 3 60 40
3 1 30 30
3 2 40 30
3 3 80 30
4 1 NA 90
4 2 NA 90
4 3 90 90"
DF <- read.table(text = Lines, header = TRUE)[1:3] # retain 1st 3 cols only