我有一个包含见习者姓名的csv文件和一个包含出版物列表的csv文件,包括一个定义作者姓名的变量。如果出版物中的作者名称与受训者文件中包含的任何受训者名称(“peeps”)匹配,我希望R为包含虚拟变量的出版物数据框添加变量。以下代码对我不起作用,我无法弄清楚原因。我收到的错误是“对象”我找不到。我是不是错了?谢谢!
publications <- read.csv("publications.csv", header = TRUE, stringsAsFactors = FALSE)
trainees <- read.csv("TraineeRoster.csv", header = TRUE, stringsAsFactors = FALSE)
peeps <- trainee$LastName
publications["TraineePub"]
for (i in 1:nrow(publications)) {
if (publications$AuthorLast[i] == peeps) {
publications$TraineePub[i]
} else {
publications$TraineePub[i]
}
}
答案 0 :(得分:0)
你可以试试这个。由于您的示例不可重现(请参阅here,here和here),因此我编写了一些数据。
set.seed(123)
publications <- data.frame(AuthorLast = sample(letters[1:10]), TraineePub = "no")
peeps <- letters[1:5]
publications$TraineePub[publications$AuthorLast %in% peeps] <- "yes"
publications
# AuthorLast TraineePub
# 1 c yes
# 2 h no
# 3 d yes
# 4 g no
# 5 f no
# 6 a yes
# 7 j no
# 8 i no
# 9 b yes
# 10 e yes
答案 1 :(得分:0)
您应该查看一些R教程,因为除了阅读原始表之外,您的代码不会执行任何操作。代码应如下所示。
publications <- read.csv("publications.csv", header = TRUE, stringsAsFactors = FALSE)
trainees <- read.csv("TraineeRoster.csv", header = TRUE, stringsAsFactors = FALSE)
peeps <- trainee$LastName
publications$IsTrainee = 1*(publications$AuthorLast %in% peeps & publications$AuthorFirst %in% trainee$FirstName)
write.csv(publications,file='PublicationsTrainee.csv')
上面的代码有些问题:
publications["TraineePub"]
没有做任何事情。您可以添加逗号以尝试引用名为“TraineePub”的行或列,但我不知道该变量是否存在。
publications$TraineePub[i]
调用一个值,但它不对它执行任何操作(除非您调用print
,它将打印该值。
编辑:此外,您应该尽量避免使用for
循环。学习使用apply
或仅使用向量操作(例如c(1,2,3,4,5)+c(2,0,3,1,3)
等同于c(3,2,6,5,8)
)