Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何按因素为第一个非NA组创建新列?_R - Fatal编程技术网

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
是开始年份的第一个非NA
X

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