使用if语句添加变量

时间:2014-04-08 19:59:26

标签: r csv

我有一个包含见习者姓名的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]
    }
}

2 个答案:

答案 0 :(得分:0)

你可以试试这个。由于您的示例不可重现(请参阅hereherehere),因此我编写了一些数据。

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)