我有两个数据帧:
DF1:
UNIQUE_ID City
k5WjB6MQa5Cru Skopje
k4Yq5QqXwoL4e Skopje
S9jGzT5qMZLyF Skopje
mhSHSuxic58Sf Skopje
MU7eys8NKXQog Skopje
GUBe1scNsXQog Bitola
S9jGzT5qMZLyF Kumanovo
DF2:
ADDRESS City
РАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВО Skopje
УЛ. МЕТОДИЈА ПАТЧЕВ БР.17А Skopje
УЛ ДРАЧЕВСКА 123 Skopje
УЛ.ДОМАЗЕТОВСКА БР. 24 Skopje
ДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3 Skopje
УЛ. ПАРТИЗАНСКИ ПАТ 2 БР. 1 Skopje
我想为DF1中的每个唯一ID分配一个随机地址。作业应符合两个标准:
所以期望的输出看起来像:
New_DF
UNIQUE_ID City ADRESS
k5WjB6MQa5Cru Skopje РАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВО
k4Yq5QqXwoL4e Skopje УЛ. МЕТОДИЈА ПАТЧЕВ БР.17А
S9jGzT5qMZLyF Skopje УЛ ДРАЧЕВСКА 123
mhSHSuxic58Sf Skopje УЛ.ДОМАЗЕТОВСКА БР. 24
MU7eys8NKXQog Skopje ДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3
GUBe1scNsXQog Bitola NA
S9jGzT5qMZLyF Kumanovo NA
有什么想法吗?
编辑:
DF1 (dput)
dput(sk[, c(2, 3)])
structure(list(City = structure(c(12L, 12L, 12L, 12L, 12L), .Label = c("Bitola",
"Gevgelija", "Gostivar", "Kavadarci", "Kicevo", "Kocani", "Krusevo",
"Kumanovo", "Negotino", "Ohrid", "Prilep", "Skopje", "Stip",
"Struga", "Strumica", "Tetovo", "Vinica"), class = "factor"),
unique_id = 1:5), .Names = c("City", "unique_id"), class = "data.frame", row.names = c(NA,
5L))
DF2 (dput)
dput(head(sk2))
structure(list(ADDRESS = c("РАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВО",
"УЛ. МЕТОДИЈА ПАТЧЕВ БР.17А", "УЛ ДРАЧЕВСКА 123", "УЛ.ДОМАЗЕТОВСКА БР. 24",
"ДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3", "УЛ. ПАРТИЗАНСКИ ПАТ 2 БР. 1"
), City = c("Skopje", "Skopje", "Skopje", "Skopje", "Skopje",
"Skopje")), .Names = c("ADDRESS", "City"), row.names = c(NA,
-6L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), vars = "City", drop = TRUE, indices = list(
0:5), group_sizes = 6L, biggest_group_size = 6L, labels = structure(list(
City = "Skopje"), row.names = c(NA, -1L), class = "data.frame", vars = "City", drop = TRUE, .Names = "City"))
答案 0 :(得分:0)
我加载了DF1和DF2,然后创建了一个新的数据框:
> library(dplyr)
> matched.df <- DF1 %>% mutate(address=DF2[sample(nrow(DF1)),]$ADDRESS)
新数据框具有所有正确的列,但在您尝试显示时看起来很有趣:
> names(matched.df)
[1] "City" "unique_id" "address"
但是当你查找它们时,地址本身看起来还不错:
> matched.df$address[1]
[1] "УЛ.ДОМАЗЕТОВСКА БР. 24"
答案 1 :(得分:0)
您可以使用
实现此目的df1 <- c('k5WjB6MQa5Cru', 'Skopje',
'k4Yq5QqXwoL4e', 'Skopje',
'S9jGzT5qMZLyF', 'Skopje',
'mhSHSuxic58Sf', 'Skopje',
'MU7eys8NKXQog', 'Skopje',
'GUBe1scNsXQog', 'Bitola',
'S9jGzT5qMZLyF', 'Kumanovo')
df1 <- data.frame(matrix(df1, ncol = 2, byrow = TRUE), stringsAsFactors = FALSE)
names(df1) <- c("UNIQUE_ID", "City")
df2 <- c('РАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВО', 'Skopje',
'УЛ. МЕТОДИЈА ПАТЧЕВ БР.17А', 'Skopje',
'УЛ ДРАЧЕВСКА 123', 'Skopje',
'УЛ.ДОМАЗЕТОВСКА БР. 24' , 'Skopje',
'ДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3' , 'Skopje',
'УЛ. ПАРТИЗАНСКИ ПАТ 2 БР. 1' , 'Skopje')
df2 <- data.frame(matrix(df2, ncol = 2, byrow = TRUE), stringsAsFactors = FALSE)
names(df2) <- c("ADDRESS", "City")
unique.cities <- unique(df1$City)
df1$Address <- unlist(sapply(unique.cities, function(x){
n.ids <- nrow(df1[df1$City == x, ])
new.address <- rep(df2[df2$City == x, ]$ADDRESS, ceiling(n.ids/nrow(df2[df2$City == x, ])))
new.address[1:n.ids]
}))
我希望这有帮助!