【问题标题】:Convert of specific rows to a new column in R将特定行转换为 R 中的新列
【发布时间】:2020-07-23 10:55:07
【问题描述】:

我有一个如下所示的数据框:

            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")      

【问题讨论】:

  • 您能否使用dput() 以可复制的形式分享您的数据?谢谢
  • 这基本上是一个填充 NA 向后的问题,在 SO 上有很多这样的问题。在 Google 中查找“na.locf R”。这是一个例子stackoverflow.com/questions/13616965/…

标签: r dataframe rows


【解决方案1】:

您可以在tidyr 中使用fill()

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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2014-11-29
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多