を使用した別のソリューションを次に示しますstrsplit
。
# The data
df.1 = read.table(header=TRUE, text="
color identifier
blue 'A1, B2, C3, C4'
yellow 'B2, C4, C6'
green 'A3'", stringsAsFactors = FALSE)
df.2 = read.table(header=FALSE, text="
A1 Mercedes
A3 BMW
B2 Porsche
C3 Toyota
C4 Hundai
C5 Volkswagen
C6 Peugeot", stringsAsFactors=FALSE)
names(df.2) = c("identifier", "car")
df.1$identifier = strsplit(df.1$identifier, split=", ")
df.1$identifier1 = lapply(1:nrow(df.1),
function(x) df.2[which(df.2$identifier %in% df.1$identifier[[x]]), 2])
df.1
# color identifier identifier1
# 1 blue A1, B2, C3, C4 Mercedes, Porsche, Toyota, Hundai
# 2 yellow B2, C4, C6 Porsche, Hundai, Peugeot
# 3 green A3 BMW
identifier
とidentifier1
がのリストになっていることに注意してくださいdata.frame
。個人的には、この方が後で作業しやすいと思います。
str(df.1)
# 'data.frame': 3 obs. of 3 variables:
# $ color : chr "blue" "yellow" "green"
# $ identifier :List of 3
# ..$ : chr "A1" "B2" "C3" "C4"
# ..$ : chr "B2" "C4" "C6"
# ..$ : chr "A3"
# $ identifier1:List of 3
# ..$ : chr "Mercedes" "Porsche" "Toyota" "Hundai"
# ..$ : chr "Porsche" "Hundai" "Peugeot"
# ..$ : chr "BMW"
strsplit
空白が残っている場合は変更が必要になる場合がありますが、このサンプル データでは機能します。また、機能strsplit
するには、データがモードになっている必要がありますas.character
(したがって、stringsAsFactors
データを読み込むときに を使用します)。
更新: write.table()
さらに分析したい場合に備えて、データをリストに保持することを好みます。ただし、データが完全であるか、単に出力目的である場合は、次のようにしたい場合があります。
df.3 = df.1
df.3$identifier = sapply(df.3$identifier, paste0, collapse=", ")
df.3$identifier1 = sapply(df.3$identifier1, paste0, collapse=", ")
これにより、 の代わりにwrite.table
sinceidentifier
およびidentifier1
are now of モードを使用できるようになります。character
list