我有一个csv文件包含受训人员的名字,一个csv文件包含一个出版物列表,包括一个定义作者姓名的变量。如果出版物中的作者名称与培训人员文件中包含的任何受训人员名称(“peep”)匹配,则我希望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]
}
}发布于 2014-04-08 20:11:49
你可以试试这个。由于您的示例不可复制(请参阅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发布于 2014-04-08 20:12:34
您可能应该阅读一些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))
https://stackoverflow.com/questions/22946982
复制相似问题