私は2つのデータフレームを持っているが関与case_when:dplyr:多くの場合
set.seed(002)
data1 <- data.frame(cbind(
a1 = sample(letters, 8, replace = TRUE),
a2 = rpois(8, 10)
), stringsAsFactors = FALSE)
data2 <- data.frame(cbind(
b1 = paste("area", 1:6, sep = " "),
b2 = c("e", "s", "o", "y", "d", "v")
), stringsAsFactors = FALSE)
data1
a1 a2
1 e 9
2 s 10
3 o 12
4 e 9
5 y 16
6 y 9
7 d 11
8 v 13
data2
b1 b2
1 area 1 e
2 area 2 s
3 area 3 o
4 area 4 y
5 area 5 d
6 area 6 v
私はDATA2の例からの情報でA1をマッチングしながら、a3を呼ばDATA1で新しい列を作成する場合は、A1 =「E」その後、A3 = "領域1"、a1 = "d"の場合、a3 = "領域5"などとなります。私は、問題は、私は多くの例を持っていると私は違うとデータフレームの数でこれを繰り返すだということである
data1 %>%
mutate(a3 = case_when(
a1 == "e" ~ "area 1",
a1 == "s" ~ "area 2",
a1 == "o" ~ "area 3",
a1 == "y" ~ "area 4",
a1 == "d" ~ "area 5",
TRUE ~ "area 6"
))
をすることによって、これを達成することができます
a1 a2 a3
1 e 9 area 1
2 s 10 area 2
3 o 12 area 3
4 e 9 area 1
5 y 16 area 4
6 y 9 area 4
7 d 11 area 5
8 v 13 area 6
:新しいDATA1は次のようになります。ケース。
私は
data1$a3 <- NA
for(i in 1:nrow(data2)){
for(j in 1:nrow(data1)){
if(data1[j,1] == data2[i,2]){
data1[j,3] <- data2[i,1]
}
}
}
を書き込むことによって、ベースRでこれを行うことができますが、私はdplyrの楽しみです。 dplyrを使用してこれを達成する方法についてのご支援をいただければ幸いです。