嗨,我有一个凌乱的数据框如下:
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}}
有人可以帮我找到一种方法来为这个数据帧添加所有缺失的索引吗?感谢
答案 0 :(得分:4)
使用dplyr和tidyr的解决方案。 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