当前位置: 首页 > 知识库问答 >
问题:

如何将NA填入R中的下一行?

吕俊才
2023-03-14

我想把NA填到下一排。这是数据集。

结构(列表)(时间戳=结构(c(1L、2L、3L、4L、5L、6L、7L、8L、9L、10L、11L、1L、2L、3L、4L、5L、6L、7L、8L、9L、10L、11L)。Label=c(“2019-07-07 00:00:00”、“2019-07-07 00:00:01”、“2019-07-07 00:00:02”、“2019-07-07 00:00:03”、“2019-07-07 00:00:05”、“2019-07-07 00:00:06”、“2019-07-07 00:00:07”、“2019-07-07 00:00:00:08”、“2019-07-07-07 00:00:00:09”、“2019-07-07-07 00:00:00:00:10”)、class=“系数”),来源=结构(c(钠,钠,钠,1L,钠,钠,钠,1L,钠,钠,钠,钠,钠,2L,钠,钠,钠,钠,钠,钠,2L,钠,钠,钠。Label=c(“用户A”、“用户B”)、class=“系数”)、value=c(NA、NA、NA、1L、NA、NA、NA、NA、NA、1L、NA、1L、NA、2L、NA、NA、NA、NA、3L、NA))、class=“data.frame”,第行。名称=c(NA,-22L))

             timestamp source value
1  2019-07-07 00:00:00   <NA>    NA
2  2019-07-07 00:00:01   <NA>    NA
3  2019-07-07 00:00:02   <NA>    NA
4  2019-07-07 00:00:03 USER_A     1
5  2019-07-07 00:00:04   <NA>    NA
6  2019-07-07 00:00:05   <NA>    NA
7  2019-07-07 00:00:06 USER_A     1
8  2019-07-07 00:00:07   <NA>    NA
9  2019-07-07 00:00:08   <NA>    NA
10 2019-07-07 00:00:09   <NA>    NA
11 2019-07-07 00:00:10   <NA>    NA
12 2019-07-07 00:00:00   <NA>    NA
13 2019-07-07 00:00:01 USER_B     1
14 2019-07-07 00:00:02   <NA>    NA
15 2019-07-07 00:00:03 USER_B     1
16 2019-07-07 00:00:04   <NA>    NA
17 2019-07-07 00:00:05   <NA>    NA
18 2019-07-07 00:00:06 USER_B     2
19 2019-07-07 00:00:07   <NA>    NA
20 2019-07-07 00:00:08   <NA>    NA
21 2019-07-07 00:00:09 USER_B     3
22 2019-07-07 00:00:10   <NA>    NA

该表是时间和源之间的各种循环。每个源(A和B)都有固定的行(在本例中为00:00:00到00:00:10)。

这是预期结果表。

             timestamp source value
1  2019-07-07 00:00:00   <NA>    NA
2  2019-07-07 00:00:01   <NA>    NA
3  2019-07-07 00:00:02   <NA>    NA
4  2019-07-07 00:00:03 USER_A     1
5  2019-07-07 00:00:04 USER_A     1
6  2019-07-07 00:00:05 USER_A     1
7  2019-07-07 00:00:06 USER_A     1
8  2019-07-07 00:00:07   <NA>    NA
9  2019-07-07 00:00:08   <NA>    NA
10 2019-07-07 00:00:09   <NA>    NA
11 2019-07-07 00:00:10   <NA>    NA
12 2019-07-07 00:00:00   <NA>    NA
13 2019-07-07 00:00:01 USER_B     1
14 2019-07-07 00:00:02 USER_B     1
15 2019-07-07 00:00:03 USER_B     1
16 2019-07-07 00:00:04 USER_B     2
17 2019-07-07 00:00:05 USER_B     2
18 2019-07-07 00:00:06 USER_B     2
19 2019-07-07 00:00:07 USER_B     3
20 2019-07-07 00:00:08 USER_B     3
21 2019-07-07 00:00:09 USER_B     3
22 2019-07-07 00:00:10   <NA>    NA

根据USER_A,5行和6行的值和源由7行的值和源替换。USER_B行也会基于下一行以相同的方式替换。

我如何在R中进行此过程

共有1个答案

孟鹤龄
2023-03-14

这里有一种使用dplyr的方法,因为每个源代码都有固定数量的行。我们首先为每个n行创建一个组,并添加一个新的列group2,该列在组中非NA值的minmax索引之间只有1个。然后,我们按group2对缺失值进行分组,并按组按以前的非缺失值对缺失值进行填充。

n <- 11
library(dplyr)  

df %>%
  group_by(group1 = gl(n()/n, n)) %>%
  mutate(group2 = 0, 
         group2 = replace(group2, min(which(!is.na(source))) : 
                                  max(which(!is.na(source))), 1)) %>%
  group_by(group2) %>%
  tidyr::fill(source, value) %>% 
  ungroup() %>%
  select(-group1, -group2) 

# A tibble: 22 x 3
#   timestamp           source value
#   <fct>               <fct>  <int>
# 1 2019-07-07 00:00:00 NA        NA
# 2 2019-07-07 00:00:01 NA        NA
# 3 2019-07-07 00:00:02 NA        NA
# 4 2019-07-07 00:00:03 USER_A     1
# 5 2019-07-07 00:00:04 USER_A     1
# 6 2019-07-07 00:00:05 USER_A     1
# 7 2019-07-07 00:00:06 USER_A     1
# 8 2019-07-07 00:00:07 NA        NA
# 9 2019-07-07 00:00:08 NA        NA
#10 2019-07-07 00:00:09 NA        NA
# … with 12 more rows
 类似资料:
  • 本文向大家介绍如何将R数据帧中的字符串转换为NA?,包括了如何将R数据帧中的字符串转换为NA?的使用技巧和注意事项,需要的朋友参考一下 我们经常会在数据收集过程中发现错误,这些错误可能会导致研究结果不正确。当错误地收集数据时,将使分析师的工作变得困难。显示数据有错误的一种情况是获取字符串代替数字值。因此,我们需要将这些字符串转换为R中的NA,以便我们可以进行预期的分析。 示例 请看以下数据帧- 将

  • 本文向大家介绍如何在R数据帧中将空值转换为NA?,包括了如何在R数据帧中将空值转换为NA?的使用技巧和注意事项,需要的朋友参考一下 当我们的数据包含空值时,很难执行分析,我们可能会将这些空值转换为NA,以便我们了解不可用的值的数量。这可以通过使用单个方括号来完成。 示例 请看以下具有一些空值的数据框- 将空值转换为NA-

  • 本文向大家介绍如何将NA替换为R数据帧中选定列的值?,包括了如何将NA替换为R数据帧中选定列的值?的使用技巧和注意事项,需要的朋友参考一下 在数据分析中,在数据框中查找某些NA值非常普遍,但如果包含NA值的列对分析无用,则所有NA值都不会产生问题。我们可以将所有NA值替换为0或将其他有用的列替换为其他值。 示例 请看以下数据帧- 将NA的连续列更改为零- 将NA的非连续列更改为零-

  • 我有一个像这样的数据框 由reprex包(v2.0.1)于2022-02-17创建 我想group_by col1,当count_col2 当count_col1 我希望我的数据看起来像这样 我不确定这是否可以通过变异(case_when…)来实现。到目前为止,我失败了

  • 本文向大家介绍如何检查向量在R中是否包含NA值?,包括了如何检查向量在R中是否包含NA值?的使用技巧和注意事项,需要的朋友参考一下 R中的NA值表示“不可用”,表示缺少值。如果一个向量甚至只有一个NA值,那么对该向量的计算就会有些困难,因为在计算过程中我们要么必须删除该NA,要么替换它,或者忽略它。要执行任何这些操作,我们将必须对代码进行一些更改,因此,最好在执行任何操作之前检查向量是否包含NA。

  • 本文向大家介绍R使用NA值读取和写入数据,包括了R使用NA值读取和写入数据的使用技巧和注意事项,需要的朋友参考一下 示例 使用read.*函数读取表格数据集时,R自动查找看起来像的缺失值"NA"。但是,缺失值并不总是由表示NA。有时,点(.),连字符(-)或字符值(例如:)empty表示值是NA。该函数的na.strings参数read.*可用于告诉R需要将哪些符号/字符视为NA值: 还可能表明需