【发布时间】:2018-07-17 02:58:04
【问题描述】:
我正在尝试根据与单独列表中元素的匹配来重新编码数据框中的变量。例如:
df <- data.frame(stringsAsFactors = FALSE,
var1 = c("116", "117", "118", "SL1", "SL2", "234"))
matchList <- list(c("116, 117, and 118", "116", "117", "118"),
c("SL1/SL2", "SL1", "SL2"))
df
var1
1 116
2 117
3 118
4 SL1
5 SL2
6 234
matchList
[[1]]
[1] "116, 117, and 118" "116" "117" "118"
[[2]]
[1] "SL1/SL2" "SL1" "SL2"
如果原始 var1 元素与 matchList 元素的第 2 - 4 项匹配,则应使用同一列表元素的第 1 项对其进行重新编码。我希望重新编码的 var1 如下所示:
var1
1 116, 117, and 118
2 116, 117, and 118
3 116, 117, and 118
4 SL1/SL2
5 SL1/SL2
6 234
以下代码行一次处理一个列表元素,但我不清楚如何自动执行此操作:
# get indices of matches for matchList element 1
r <- which(df$var1 %in% matchList[[1]])
# replace matches with first list item of list element 1 using indices of matches
df$var1[r] <- matchList[[1]][1]
我尝试了以下 for 循环,但我不确定我缺少什么
for (i in length(matchList)){
r <- which(df$var1 %in% matchList[[i]])
df$var1[r] <- matchList[[i]][1]
}
【问题讨论】: