首先给出一些背景知识:
我目前有2个数据框(长颈鹿,叶子),它们都共享列'key',其中叶子数据框中的元素是长颈鹿的子集。我需要做的是比较两个数据帧,当'key'列中的两个数据帧中都有匹配的元素时,字符串'leaf'将被输入到长颈鹿数据框内的另一列(项目)中row作为匹配的'key'元素。我采取了以下方法,但似乎我在某处发生了一个小错误,在网上搜索后,我仍然不知道它是什么:
Truth_vector <- is.element((giraffe[,1]),(leaf[,1]))
#返回一个包含3000个元素的向量,大多数都是FALSE,除了'key'中的元素存在于两个数据帧中
i=1
for (i in 1:length(giraffe[,1])) {
if Truth_vector[i] == TRUE {
giraffe[i,5] <- 'leaf'
}
i = i+1
}
Error: unexpected '}' in "}"
编辑:
我尝试将解决方案作为一个函数实现,但是最终没有发生任何事情,也没有返回任何错误消息。我所做的是:
Project_assign <- function(prjct) {
Truth_vector <- is.element((giraffe[,1]),(prjct[,1]))
giraffe[which(Truth_vector),5] <- 'prjct'
}
Project_assign(leaf)
编辑:这是因为所有内容都在功能子环境中分配,而不是全局环境。使用assign('giraffe',giraffe,envir = .GlobalEnv)解决了这个问题,你应该尝试避免使用assign函数,而是使用for循环遍历所有数据帧的列表
答案 0 :(得分:3)
你有几个问题。首先,if标准需要在括号中,其次,您不需要自己增加i
。这应该足够了:
for (i in 1:length(giraffe[,1])) {
if (Truth_vector[i] == TRUE) {
giraffe[i,5] <- 'leaf'
}
}
当然,这也会这样做:
giraffe[which(Truth_vector),5] <- 'leaf'
(假设Truth_vector不长于长颈鹿的行数)