【问题标题】:adding variable using if statement使用 if 语句添加变量
【发布时间】:2014-04-08 19:59:26
【问题描述】:

我有一个包含实习生姓名的 csv 文件和一个包含出版物列表的 csv 文件,其中包括一个定义作者姓名的变量。如果出版物中的作者姓名与实习生文件中包含的任何实习生姓名(“窥视”)匹配,我希望 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]
    }
}

【问题讨论】:

  • 您是否尝试过使用ifelse?它在这里可能比for 循环和if-else 语句更有效
  • 我没试过。我对r很陌生。感谢您的提示。

标签: r csv


【解决方案1】:

你可以试试这个。由于您的示例不可重现(请参阅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

【讨论】:

  • 感谢@Henrik,这对您有很大帮助!
【解决方案2】:

您可能应该阅读一些 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)

【讨论】:

  • 这很有意义。我不敢相信我已经通过了 2 个 MOOC 和 O'Reilly 的 R Cookbook,但我仍然遇到了这样的基本绊脚石。你的反馈真的很有帮助。谢谢! @user1362215
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多