在数据框中添加缺失的索引

时间:2017-12-21 00:53:27

标签: r dataframe

嗨,我有一个凌乱的数据框如下:

   index    age.band   value
     A1         0-5        10
     A2         0-5        10
     A3         0-5        10
     A4         0-5        10
     A5         0-5        10
     B1         5-10        5
     B2         5-10        5
     B3         5-10        5

我想将其转换为更友好的格式,例如:

{{1}}

有人可以帮我找到一种方法来为这个数据帧添加所有缺失的索引吗?感谢

2 个答案:

答案 0 :(得分:4)

使用的解决方案。 Nptice我添加了stringsAsFactors = FALSE以避免在创建示例数据框时创建因子列。如果您在原始数据框上运行代码,由于因子列,您将收到警告消息,但不会影响最终结果。

library(dplyr)
library(tidyr)

df2 <- df %>%
  gather(Code, Value, ends_with("code")) %>%
  extract(Value, into = c("Group", "Index"), regex = "([A-Za-z+].*)([\\d].*$)",
          convert = TRUE) %>%
  select(-Code) %>%
  group_by(Group) %>%
  complete(Index = full_seq(Index, period = 1)) %>%
  unite(Index, c("Group", "Index"), sep = "") %>%
  fill(-Index)
df2
# # A tibble: 8 x 3
#   Index age.band value
# * <chr>    <chr> <dbl>
# 1    A1      0-5    10
# 2    A2      0-5    10
# 3    A3      0-5    10
# 4    A4      0-5    10
# 5    A5      0-5    10
# 6    B1     5-10     5
# 7    B2     5-10     5
# 8    B3     5-10     5

数据

df <- data.frame(age.band = c("0-5","5-10"), beg.code = c("A1","B1"), end.code=c("A5","B3"),value = c(10,5),
                 stringsAsFactors = FALSE)

答案 1 :(得分:1)

以下是base R的一个选项。我们的想法是删除“&#39;代码”中的非数字字符。列,将其转换为numeric并将序列存储为list。然后,paste非数字字符,最后根据lengths的{​​{1}},使用list展开原始数据集的行,并创建一个新列& #39;指数&#39; rep unlist

list