将特定行转换为R

时间:2020-07-23 10:55:07

标签: r dataframe rows

我有一个看起来像这样的数据框:

            1058       <NA>                <NA>
218   ZD/57/2020 2020-08-07                  50
219   ZD/78/2020 2020-09-11                  50
225         1059       <NA>                <NA>
236   ZD/57/2020 2020-08-07                  50
237   ZD/79/2020 2020-09-18                  50
243         1060       <NA>                <NA>
254   ZD/79/2020 2020-09-18                  30

我希望第一列中的数字与NA剩余的列组成一个单独的列。

218   ZD/57/2020 2020-08-07                  50  1058
219   ZD/78/2020 2020-09-11                  50  1058
236   ZD/57/2020 2020-08-07                  50  1059       
237   ZD/79/2020 2020-09-18                  50  1059         
254   ZD/79/2020 2020-09-18                  30  1060 

> dput(data)
structure(list(one = c("1003", "ZD/57/2020", "ZD/58/2020", "ZD/70/2020", 
"ZD/78/2020", "1004", "ZD/58/2020", "ZD/78/2020"), three = structure(c(NA, 
1596758400, 1597363200, 1599177600, 1599782400, NA, 1597363200, 
1599782400), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    `Ilość na mag Główny` = c(NA, "40", "50", "50", "50", NA, 
    "50", "50")), row.names = c(4L, 15L, 16L, 17L, 18L, 24L, 
29L, 30L), class = "data.frame")      

1 个答案:

答案 0 :(得分:2)

您可以在fill()中使用tidyr

library(dplyr)
library(tidyr)

df %>%
  mutate(V4 = ifelse(is.na(V2), V1, NA)) %>%
  fill(V4) %>%
  drop_na()

#           V1         V2 V3   V4
# 1 ZD/57/2020 2020-08-07 50 1058
# 2 ZD/78/2020 2020-09-11 50 1058
# 3 ZD/57/2020 2020-08-07 50 1059
# 4 ZD/79/2020 2020-09-18 50 1059
# 5 ZD/79/2020 2020-09-18 30 1060

数据

df <- structure(list(V1 = c("1058", "ZD/57/2020", "ZD/78/2020", "1059", 
"ZD/57/2020", "ZD/79/2020", "1060", "ZD/79/2020"), V2 = structure(c(NA, 
18481, 18516, NA, 18481, 18523, NA, 18523), class = "Date"), 
V3 = c(NA, 50, 50, NA, 50, 50, NA, 30)), row.names = c(NA, 
-8L), class = "data.frame")
相关问题