例如数据见下文。 假设我有一个包含两列A,B的data.frame.A由代码组成。代码链接到B列,其中包含人们可以居住的区域。一个代码可以对应多个区域。 我希望创建一个文件,其中每一行都包含一个唯一的代码,后面是填充了代码所属区域的列。
示例数据
A B
<dbl> <chr>
1 1483 De Rijp
2 1483 De Rijp
3 1483 De Rijp-Gracht
4 1483 De Rijp-Gracht
5 1423 Huiswaard
6 1423 Huiswaard-Noord
7 1423 Huiswaard-Zuid
8 1811 Centrum
9 1811 Centrum
10 1811 Centrum
11 1811 Centrum
12 1811 Overdie
13 1811 Overdie
14 1811 Overdie
15 1811 Overdie
我最终希望得到什么:
code area area_1 area_2 area_3 area_4
<dbl> <chr> <chr> <chr> <chr> <chr>
1 1483 De Rijp De Rijp-Gracht
2 1423 Huiswaard Huiswaard-Noord Huiswaard-Zuid
3 1811 Centrum Overdie
我知道您可以使用unique(df$A)
获取唯一代码,但在此之后我不知道从哪里开始以及什么是合适的。
编辑输入数据:
structure(list(A = c(1483, 1483, 1483, 1483, 1423, 1423, 1423,
1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811), B = c("De Rijp",
"De Rijp", "De Rijp-Gracht", "De Rijp-Gracht", "Huiswaard", "Huiswaard-Noord",
"Huiswaard-Zuid", "Centrum", "Centrum", "Centrum", "Centrum",
"Overdie", "Overdie", "Overdie", "Overdie")), .Names = c("A",
"B"), row.names = c(NA, -15L), class = c("tbl_df", "tbl", "data.frame"
))
答案 0 :(得分:5)
{{1}}
答案 1 :(得分:2)
这是你想要的吗?
ddf <- unique(df)
ddfs <- split(ddf, ddf$A)
dddfs <- lapply(ddfs, function(dd) transform(dd, area = paste0("area",1:nrow(dd))))
dddf <- do.call(rbind, dddfs)
library(reshape2)
dcast(dddf, A ~ area, value.var = "B")
这给出了:
> dcast(dddf, A ~ area, value.var = "B")
A area1 area2 area3
1 1423 Huiswaard Huiswaard-Noord Huiswaard-Zuid
2 1483 De Rijp De Rijp-Gracht <NA>
3 1811 Centrum Overdie <NA>
答案 2 :(得分:0)
这是你在找什么?
# Calculate maximum number of areas
noAreas <- max(sapply(lapply(unique(data$A),
function(x) table(data[data$A %in% x, ]$B)), length))
library(plyr)
# Create data frame
ddply(data, 'A',
function(x) {
vec <- vector(mode = 'character', length = noAreas)
areas <- unique(x$B)
vec[1:length(areas)] <- areas
vec
})
您需要做的就是根据需要格式化最终数据框(即colnames)