【发布时间】:2017-10-29 00:15:12
【问题描述】:
我有一个包含 4 个字符列的数据框
df <- data.frame(2016=c("light", "", "", "", ""), 2017=c("radio", "", "", "", ""), after2017=c("", "Utility grid connection for lighting", "", "", "light"), dkcs=c("", "", "TV", "TV", ""))
我想创建第 5 列“db”,如果该行的所有 4 列都为空,或者该列的值“包含”字符串“Utility grid”,则它的值为 0,否则值为“分贝”是 1。
我编写了以下代码,它可以运行,但无论它是否应该为 0,它都将 db 的所有值都设为 1。如果我删除了 'if' 条件中的 'or' 条件,则代码可以正常工作。你觉得哪里不对?我使用“包含”的方式也正确吗?感谢您的帮助!
for(i in 1:nrow(df)) {
if(df$2016[i]!= "" | df$2016H2[i]!= "Utility grid.") {
df$db[i] <- 1
} else if (df$2017[i]!="" | df$2017[i]!="Utility grid.") {
df$db[i] <- 1
} else if (df$after2017[i]!="" | df$after2017[i]!="Utility grid.") {
df$db[i] <- 1
} else if (df$dkcs[i]!="" | df$dkcs[i]!="Utility grid.") {
df$db[i] <- 1
}
else df$db[i] <- 0
}
【问题讨论】:
-
您的数据没有变量
2016H2- 也许这就是问题所在。 -
旁注:我不知道你的循环出了什么问题。但是,您应该确保您的示例
df可以被复制粘贴(按照您指定的方式,它会产生错误)并且它包含您的特定情况(例如,如果我看到“所有字段都是空的”则丢失对) -
你能添加预期的结果吗?
-
感谢您的 cmets。 Agstudy,所需的结果是 db
-
我之前应该澄清一下 - 我的数据框实际上有 41 列和 600 行。为简单起见,我只在此处粘贴了与我的问题相关的列子集。就我的数据框中的列顺序而言,有问题的 4 列是 28:31。
标签: r for-loop if-statement contains